home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / tahoe / math / Klogf.s < prev    next >
Encoding:
Text File  |  1991-05-04  |  4.7 KB  |  199 lines

  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.  * Redistribution and use in source and binary forms, with or without
  9.  * modification, are permitted provided that the following conditions
  10.  * are met:
  11.  * 1. Redistributions of source code must retain the above copyright
  12.  *    notice, this list of conditions and the following disclaimer.
  13.  * 2. Redistributions in binary form must reproduce the above copyright
  14.  *    notice, this list of conditions and the following disclaimer in the
  15.  *    documentation and/or other materials provided with the distribution.
  16.  * 3. All advertising materials mentioning features or use of this software
  17.  *    must display the following acknowledgement:
  18.  *    This product includes software developed by the University of
  19.  *    California, Berkeley and its contributors.
  20.  * 4. Neither the name of the University nor the names of its contributors
  21.  *    may be used to endorse or promote products derived from this software
  22.  *    without specific prior written permission.
  23.  *
  24.  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
  25.  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  26.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  27.  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
  28.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  29.  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  30.  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  31.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  32.  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  33.  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  34.  * SUCH DAMAGE.
  35.  *
  36.  *    @(#)Klogf.s    7.1 (Berkeley) 12/6/90
  37.  */
  38.  
  39. #include "../tahoe/SYS.h"
  40.  
  41.     .text
  42. ENTRY(Klogf, R5|R4|R3|R2)
  43.     subl3    $88,fp,sp
  44.     clrl    8(fp)
  45.     tstl    4(fp)
  46.     jgtr    L53
  47.     movl    small+4,r1
  48.     movl    small,r0
  49.     ret
  50. L53:    pushl    20(fp)            # hfs
  51.     subl3    $88,fp,-(sp)        # &exp
  52.     pushl    8(fp)            # arg
  53.     pushl    4(fp)
  54.     callf    $20,_Kfrexpf
  55.     ldd    r0
  56.                     # movl    r1,-56(fp)
  57.     std    -60(fp)            # movl    r0,-60(fp)
  58.     jbr    L55
  59. L2000001:
  60.     pushl    20(fp)            # hfs
  61.     ldd    two            # 2.0
  62.     pushd
  63.     ldd    -60(fp)            # x
  64.     pushd    
  65.     callf    $24,_Kmuld
  66.     ldd    r0
  67.     std    -60(fp)
  68.     subl2    $1,-88(fp)
  69. L55:    cmpd2    -60(fp),half
  70.     jlss    L2000001
  71.     cmpd2    -60(fp),_sqrto2
  72.     jgeq    L59
  73.     pushl    20(fp)            # hfs
  74.     ldd    -60(fp)            # x
  75.     pushd
  76.     ldd    two            # 2.0
  77.     pushd
  78.     callf    $24,_Kmuld
  79.     ldd    r0
  80.     std    -60(fp)
  81.     subl2    $1,-88(fp)
  82. L59:    pushl    20(fp)            # hfs
  83.     ldd    one            # 1.0
  84.     pushd
  85.     ldd    -60(fp)            # x
  86.     pushd
  87.     callf    $24,_Ksubd    
  88.     ldd    r0
  89.     std    r2
  90.     pushl    20(fp)            # hfs
  91.     ldd    one            # 1.0
  92.     pushd
  93.     ldd    -60(fp)            # x
  94.     pushd
  95.     callf    $24,_Kaddd
  96.     ldd    r0
  97.     std    r4
  98.     pushl    20(fp)            # hfs
  99.     ldd    r4            # temp result of x-1
  100.     pushd
  101.     ldd    r2            # temp result of x+1
  102.     pushd
  103.     callf    $24,_Kdivd
  104.     ldd    r0
  105.     std    -68(fp)            # z
  106.     pushl    20(fp)            # hfs
  107.     pushd                # z
  108.     pushd                # z
  109.     callf    $24,_Kmuld
  110.     ldd    r0
  111.     std    -76(fp)            # zsq
  112.     pushl    20(fp)            # hfs
  113.     ldd    -76(fp)            # zsq
  114.     pushd
  115.     ldd    _p1            # p1
  116.     pushd
  117.     callf    $24,_Kmuld
  118.     ldd    r0
  119.     std    r2
  120.     pushl    20(fp)            # hfs
  121.     ldd     _p0            # p0
  122.     pushd
  123.     ldd    r2
  124.     pushd
  125.     callf    $24,_Kaddd
  126.     ldd    r0
  127.     std    -84(fp)            # temp
  128.     pushl    20(fp)            # hfs
  129.     ldd    -76(fp)            # zsq
  130.     pushd
  131.     ldd    _q1
  132.     pushd
  133.     callf    $24,_Kmuld
  134.     ldd    r0
  135.     std    r2
  136.     pushl    20(fp)            # hfs
  137.     ldd    _q0            # q0
  138.     pushd
  139.     ldd    r2
  140.     pushd
  141.     callf    $24,_Kaddd
  142.     ldd    r0
  143.     std    r2            # temp result of (q1*zsq+q0)
  144.     pushl    20(fp)            # hfs
  145.     ldd    r2
  146.     pushd
  147.     ldd    -84(fp)            # temp
  148.     pushd
  149.     callf    $24,_Kdivd
  150.     ldd    r0
  151.     std    -84(fp)            # put in temp
  152.     pushl    20(fp)            # hfs
  153.     ldd    -68(fp)            # z
  154.     pushd
  155.     ldd    -84(fp)
  156.     pushd
  157.     callf    $24,_Kmuld
  158.     ldd    r0
  159.     std    r2
  160.     pushl    20(fp)            #hfs
  161.     pushl    $0            # 0 pad
  162.     pushl    -88(fp)            # exp
  163.     pushl    $0            # dummy
  164.     pushl    $0            # dummy
  165.     callf    $24,_Kcvtld
  166.     pushl    20(fp)            # hfs
  167.     ldd    _log2            # log2
  168.     pushd
  169.     pushl    r1            # exp converted
  170.     pushl    r0            
  171.     callf    $24,_Kmuld
  172.     ldd    r0
  173.     std    r4
  174.     pushl    20(fp)            # hfs
  175.     ldd    r2            # result of temp*z
  176.     pushd
  177.     ldd    r4
  178.     pushd
  179.     callf    $24,_Kaddd
  180.     ldd    r0
  181.     cvdf
  182.     stf    r0
  183.     clrl    r1
  184.     ret
  185.  
  186.     .data
  187.     .align    2
  188. _log2:    .long    0x40317217, 0xf7d1cf7a # .double 0.69314718055994531
  189. _ln10:    .long    0x41135d8d, 0xddaaa8ac # .double 2.3025850929940457
  190. _sqrto2:.long    0x403504f3, 0x33f9de65 # .double 0.70710678118654753
  191. _p0:    .long    0xc154114d, 0xeb0ba468 # .double -3.31355617479
  192. _p1:    .long    0x40654226, 0x56bd0c4c # .double 0.89554061525
  193. _q0:    .long    0xc0d4114c, 0xfdc7df02 # .double -1.65677797691
  194. _q1:    .long    0x40800000, 0x00000000 # .double 1
  195. small:    .long    0xfffffffe, 0xfffffffe # .double -1.7014117331926443e+38
  196. half:    .long    0x40000000, 0x00000000 # .double 0.5
  197. two:    .long    0x41000000, 0x00000000 # .double 2
  198. one:    .long    0x40800000, 0x00000000 # .double 1
  199.