/*- * Copyright (c) 1985 The Regents of the University of California. * All rights reserved. * * This code is derived from software contributed to Berkeley by * Computer Consoles Inc. * * %sccs.include.redist.c% * * @(#)Kexpf.s 7.1 (Berkeley) 12/06/90 */ #include "../tahoe/SYS.h" .text ENTRY(Kexpf, R4|R3) subl3 $88,fp,sp tstl 4(fp) jneq 1f movl one,r0 ret 1: lnd _maxf cmpd 4(fp) jleq 1f clrl r0 ret 1: cmpd2 4(fp),_maxf jleq 1f ldd _HUGE cvdf stf r0 ret 1: pushl 20(fp) # hfs ldd _log2e; pushd ldd 4(fp); pushd callf $24,_Kmuld ldd r0 std 4(fp) pushl 20(fp) # hfs pushl 8(fp) pushl 4(fp) callf $16,_Kfloorf movl r0,-88(fp) # (int)ent from Kfloorf cvlf -88(fp) clrl r1 stf r0 pushl 20(fp) # hfs pushl r1 pushl r0 ldd 4(fp); pushd callf $24,_Ksubd # (arg - ent) pushl 20(fp) # hfs ldd half; pushd ldd r0; pushd callf $24,_Ksubd ldd r0; std -60(fp) # fract pushl 20(fp) # hfs pushd pushd callf $24,_Kmuld ldd r0; std -84(fp) # xsq pushl 20(fp) # hfs pushd # xsq ldd _p2; pushd callf $24,_Kmuld pushl 20(fp) # hfs ldd _p1; pushd ldd r0; pushd callf $24,_Kaddd pushl 20(fp) # hfs ldd -84(fp); pushd ldd r0; pushd callf $24,_Kmuld pushl 20(fp) # hfs ldd _p0; pushd ldd r0; pushd callf $24,_Kaddd pushl 20(fp) # hfs ldd -60(fp); pushd # fract ldd r0; pushd callf $24,_Kmuld ldd r0; std -68(fp) # temp1 pushl 20(fp) # hfs ldd -84(fp); pushd # xsq ldd _q2; pushd callf $24,_Kmuld pushl 20(fp) # hfs ldd _q1; pushd ldd r0; pushd callf $24,_Kaddd pushl 20(fp) # hfs ldd -84(fp); pushd ldd r0; pushd callf $24,_Kmuld pushl 20(fp) # hfs ldd _q0; pushd ldd r0; pushd callf $24,_Kaddd ldd r0; std -76(fp) # temp2 pushl 20(fp) # hfs for Kldexpf pushl -88(fp) # ent pushl 20(fp) # hfs tor temp2+temp1 ldd -68(fp); pushd # temp1 ldd -76(fp); pushd # temp2 callf $24,_Kaddd pushl 20(fp) # hfs ldd _sqrt2; pushd ldd r0; pushd # temp2+temp1 callf $24,_Kmuld ldd r0; std r2 # sqrt2*(temp2+temp1) pushl 20(fp) # hfs ldd -68(fp) pushd ldd -76(fp) pushd callf $24,_Ksubd # temp2-temp1 pushl 20(fp) # hfs ldd r0 pushd # temp2-temp1 ldd r2 pushd callf $24,_Kdivd ldd r0 pushd callf $20,_Kldexpf #pushl 20(fp) # hfs #pushl $0 #pushl r0 # cvlf r0 #pushl $0 #pushl $0 #callf $24,_Kcvtld #ldd r0 #cvdf #stf r0 ret /* file : Kfloorf.x */ .text .globl _Kfloorf .data .align 2 L19: .long 0x40800000, 0x00000000 # .double 1 .text .set L13,0x0 .data .text _Kfloorf: .word L13 subl3 $60,fp,sp tstl 4(fp) # if (d<0.0) { jgeq L17 lnd 4(fp) std 4(fp) # d = -d; pushl 12(fp) # hfs addl3 $4,fp,-(sp) # &d pushl 8(fp) pushl 4(fp) callf $20,_Kmodf clrl -60+4(fp) movl r0,-60(fp) # fract = modf(d,&d); tstl r0 # if (fract != 0.0) jeql L18 pushl 12(fp) # hfs ldd L19 pushd ldd 4(fp) pushd callf $24,_Kaddd ldd r0 std 4(fp) # d +=1; L18: lnd 4(fp) std 4(fp) # d = -d; jbr L20 L17: pushl 12(fp) # hfs addl3 $4,fp,-(sp) pushl 8(fp) pushl 4(fp) callf $20,_Kmodf L20: ldd 4(fp) cvdl r0 # for Kexpf call only! ret .data _p0: .long 0x45BD3D04, 0x7F734DBD # .double 1513.9067990543389 _p1: .long 0x42A19DD4, 0x989F60DA # .double 20.202065651286927 _p2: .long 0x3DBD2E42, 0xAB70BDA9 # .double .023093347753750233 _q0: .long 0x468881B1, 0x7C3A6529 # .double 4368.2116627275583 _q1: .long 0x44692F28, 0x7AE89541 # .double 233.18421142748162 _q2: .long 0x40800000, 0x00000000 # .double 1 _log2e: .long 0x40B8AA3B, 0x295C17F0 # .double 1.4426950408889634 _sqrt2: .long 0x40B504F3, 0x33F9DE64 # .double 1.414213562373095 _maxf: .long 0x471C4000, 0x00000000 # .double 10000 _HUGE: .long 0x7FFFFFFE, 0xFFFFFFFC # .double 1.701411733192644e+38 one: .long 0x40800000 # .float 1 half: .long 0x40000000, 0x00000000 # .double .5