home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / tahoe / math / Ksinfcosf.s < prev    next >
Encoding:
Text File  |  1991-05-04  |  6.1 KB  |  256 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.  *    @(#)Ksinfcosf.s    7.1 (Berkeley) 12/6/90
  37.  */
  38.  
  39. #include "../tahoe/SYS.h"
  40.  
  41.     .text
  42. ENTRY(Kcosf, 0)
  43.     tstl    4(fp)        # if (arg < 0)
  44.     jgeq    L23
  45.     lnd    4(fp)
  46.     std    4(fp)        # arg = -arg;
  47. L23:    pushl    20(fp)        #     hfs
  48.     pushl    $1
  49.     pushl    8(fp)
  50.     pushl    4(fp)
  51.     callf    $20,_sinus
  52.     ret            # return(sinus(arg,1));
  53.  
  54. ENTRY(Ksinf, 0)
  55.     pushl    20(fp)        # hfs
  56.     pushl    $0
  57.     pushl    8(fp)
  58.     pushl    4(fp)
  59.     callf    $20,_sinus
  60.     ret            # return(sinus(arg, 0));
  61.  
  62. ENTRY(sinus, 0)
  63.     subl3    $112,fp,sp
  64.     movl    8(fp),-80(fp)
  65.     movl    4(fp),-84(fp)    # x = arg;
  66.     jgeq    L34        # if (x < 0) {
  67.     lnd    -84(fp)
  68.     std    -84(fp)        # x = -x;
  69.     addl2    $2,12(fp)    # quad = quad + 2;}
  70. L34:    pushl    16(fp)
  71.     ldd    _twoopi    
  72.     pushd
  73.     ldd    -84(fp)
  74.     pushd    
  75.     callf    $24,_Kmuld
  76.     movl    r1,-88(fp)
  77.     movl    r0,-84(fp)    # std    -84(fp)     x = x * twoopi;
  78.     cmpd2    -84(fp),L36    # if (x > 32764) {
  79.     jleq    L35
  80.     pushl    16(fp)        # hfs
  81.     subl3    $60,fp,-(sp)    # &e
  82.     pushl    -80(fp)
  83.     pushl    -84(fp)        # x
  84.     callf    $20,_Kmodf
  85.     clrl    -92+4(fp)
  86.     movl    r0,-92(fp)    # y = modf(x, &e);
  87.     pushl    16(fp)        # hfs
  88.     pushl    $0
  89.     pushl    12(fp)        # quad
  90.     pushl    $0
  91.     pushl    $0        # dummy acc
  92.     callf    $24,_Kcvtld
  93.     pushl    16(fp)        # hfs
  94.     pushl    r1
  95.     pushl    r0         # pushd     (double)quad
  96.     ldd    -60(fp)
  97.     pushd            # &e
  98.     callf    $24,_Kaddd
  99.     movl    r1,-56(fp)
  100.     movl    r0,-60(fp)     # std    -60(fp) e = e + quad;
  101.     pushl    16(fp)        # hfs
  102.     subl3    $68,fp,-(sp)    # &f
  103.  
  104.     pushl    16(fp)        # hfs
  105.     ldd    -60(fp)
  106.     pushd            # &e
  107.     ldd    L37
  108.     pushd            # 0.25
  109.     callf    $24,_Kmuld
  110.  
  111.     pushl    r1
  112.     pushl    r0        # pushd     0.25 * e
  113.     callf    $20,_Kmodf    # modf(0.25 * e, &f);
  114.     
  115.     pushl    16(fp)        # hfs
  116.     movl    r1,-64(fp)
  117.     movl    r0,-68(fp)    # ldd    -68(fp)     &f
  118.     pushl    r1
  119.     pushl    r0        # pushd
  120.     ldd    L38
  121.     pushd
  122.     callf    $24,_Kmuld    # 4*f
  123.                 # std    r0
  124.     pushl    16(fp)        # hfs
  125.     pushl    r1
  126.     pushl    r0        # pushd    
  127.     ldd    -60(fp)
  128.     pushd
  129.     callf    $24,_Ksubd    # e - 4 * f
  130.     ldd    r0        # load acc with result of Ksubd
  131.     cvdl    12(fp)        # quad = (e - 4 * f); }
  132.     jbr    L39
  133. L35:    ldd    -84(fp)        # else {
  134.     cvdl    -96(fp)        # k = x;
  135.     pushl    16(fp)        # hfs
  136.     pushl    $0
  137.     pushl    -96(fp)
  138.     pushl    $0
  139.     pushl    $0        # acc
  140.     callf    $24,_Kcvtld
  141.                 # std    r0
  142.     pushl    16(fp)        # hfs
  143.     pushl    r1
  144.     pushl    r0        # pushd     (double)k
  145.     ldd    -84(fp)
  146.     pushd            # x
  147.     callf    $24,_Ksubd
  148.     movl    r1,-88(fp)
  149.     movl    r0,-92(fp)    # std    -92(fp) y = x - k;
  150.     addl3    -96(fp),12(fp),r0
  151.     andl3    $3,r0,12(fp)    # quad = (quad + k) & 03; }
  152. L39:    bitl    $1,12(fp)    # if (quad & 01)
  153.     jeql    L40
  154.     pushl    16(fp)        # hfs
  155.     ldd    -92(fp)
  156.     pushd            # y
  157.     ldd    L41
  158.     pushd            # 1.0
  159.     callf    $24,_Ksubd
  160.     movl    r1,-88(fp)
  161.     movl    r0,-92(fp)    # std    -92(fp) y = 1 - y;
  162. L40:    cmpl    12(fp),$1    # if (quad > 1)
  163.     jleq    L42
  164.     lnd    -92(fp)
  165.     std    -92(fp)        # y = -y;
  166. L42:    pushl    16(fp)        # hfs
  167.     ldd    -92(fp)
  168.     pushd
  169.     pushd
  170.     callf    $24,_Kmuld    # y*y
  171.     movl    r1,-72(fp)
  172.     movl    r0,-76(fp)    # std    -76(fp)     ysq=y*y;
  173.  
  174.     pushl    16(fp)        # hfs
  175.     ldd    -76(fp)
  176.     pushd
  177.     ldd    _p4
  178.     pushd
  179.     callf    $24,_Kmuld    # p4*ysq
  180.  
  181.     pushl    16(fp)        # hfs
  182.     pushl    _p3+4
  183.     pushl    _p3
  184.     pushl    r1
  185.     pushl    r0        # pushd
  186.     callf    $24,_Kaddd    # p4*ysq+p3
  187.  
  188.     pushl    16(fp)        # hfs
  189.     pushl    -72(fp)
  190.     pushl    -76(fp)
  191.     pushl    r1
  192.     pushl    r0        # pushd
  193.     callf    $24,_Kmuld    # (p4*ysq+p3)*ysq
  194.  
  195.     pushl    16(fp)        # hfs
  196.     pushl    _p2+4
  197.     pushl    _p2
  198.     pushl    r1
  199.     pushl    r0        # pushd
  200.     callf    $24,_Kaddd    # (p4*ysq+p3)*ysq+p2
  201.  
  202.     pushl    16(fp)        # hfs
  203.     pushl    -72(fp)
  204.     pushl    -76(fp)
  205.     pushl    r1
  206.     pushl    r0        # pushd
  207.     callf    $24,_Kmuld    # ((p4*ysq+p3)*ysq+p2)*ysq    
  208.  
  209.     pushl    16(fp)        # hfs
  210.     pushl    _p1+4
  211.     pushl    _p1
  212.     pushl    r1
  213.     pushl    r0        # pushd
  214.     callf    $24,_Kaddd    # ((p4*ysq+p3)*ysq+p2)*ysq+p1
  215.  
  216.     pushl    16(fp)        # hfs
  217.     pushl    -72(fp)
  218.     pushl    -76(fp)
  219.     pushl    r1
  220.     pushl    r0        # pushd
  221.     callf    $24,_Kmuld    # (((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq    
  222.  
  223.     pushl    16(fp)        # hfs
  224.     pushl    _p0+4
  225.     pushl    _p0
  226.     pushl    r1
  227.     pushl    r0        # pushd
  228.     callf    $24,_Kaddd    # (((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq+p0    
  229.  
  230.     pushl    16(fp)        # hfs
  231.     pushl    -88(fp)
  232.     pushl    -92(fp)
  233.     pushl    r1
  234.     pushl    r0        # pushd
  235.     callf    $24,_Kmuld    # ((((p4*ysq+p3)*ysq+p2)*ysq+p1)*ysq+p0)*y;    
  236.  
  237.     movl    r1,-100(fp)
  238.     movl    r0,-104(fp)    # std    -104(fp) temp1
  239.     ldd    r0
  240.     cvdf
  241.     stf    r0
  242.     ret#1
  243.  
  244.     .data
  245.     .align    2
  246. _twoopi:.long    0x4022F983, 0x6E4E4415 # .double .63661977236758134
  247. _p0:    .long    0x40C90FDA, 0x90304197 # .double 1.57079631844
  248. _p1:    .long    0xC0255DE0, 0xB36CEE75 # .double -.645963710599
  249. _p2:    .long    0x3EA33457, 0xA736E807 # .double .079689678945999999
  250. _p3:    .long    0xBC992665, 0x5E9A6554 # .double -.0046737666099999999
  251. _p4:    .long    0x3A1ED7FA, 0xCC54924E # .double .000151485129
  252. L36:    .long    0x47FFF800, 0x00000000 # .double 32764
  253. L37:    .long    0x3F800000, 0x00000000 # .double .25
  254. L38:    .long    0x41800000, 0x00000000 # .double 4
  255. L41:    .long    0x40800000, 0x00000000 # .double 1
  256.