home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / tahoe / math / Kcvtfl.s < prev    next >
Encoding:
Text File  |  1991-05-04  |  3.1 KB  |  95 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.  *    @(#)Kcvtfl.s    7.1 (Berkeley) 12/6/90
  37.  */
  38.  
  39. #include "../math/fp.h"
  40. #include "../tahoe/SYS.h"
  41.  
  42.     .text
  43. ENTRY(Kcvtfl, R5|R4|R3|R2)
  44.     clrl    r1
  45.     clrl    r4        # r4 - negative flag.
  46.     clrl    r2        # r2 - exponent.
  47.     movl    4(fp),r0    # fetch operand.
  48.     movl    r0,r5        # need another copy.
  49.     jeql    retzero        # return zero.
  50.     jgtr    positive
  51.     mnegl    r0,r0
  52.     jvs    retmin        # return minimum integer.
  53.     incl    r4        # remember it was negative.
  54.     movl    r0,r5        # remember the negated value.
  55.  #
  56.  #Compute exponent:
  57.  #
  58. positive:
  59.     ffs    r0,r1
  60.     incl     r1
  61.     addl2    r1,r2
  62.     shrl    r1,r0,r0
  63.     jneq    positive    # look for more set bits.
  64.  #
  65.  #we have the exponent in r2.
  66.  #
  67.     movl    r5,r0        # r0 will hold the resulting f.p. number.
  68.  #
  69.  #Shift the fraction part to its proper place:
  70.  #
  71.     subl3    r2,$HID_POS,r3
  72.     jlss    shiftr        # if less then zero we have to shift right.
  73.     shll    r3,r0,r0    # else we shift left.
  74.     jmp    shifted
  75. shiftr:
  76.     mnegl    r3,r3
  77.     shrl    r3,r0,r0
  78. shifted:
  79.     andl2    $CLEARHID,r0    # clear the hidden bit.
  80.     shal    $EXPSHIFT,r2,r2    # shift the exponent to its proper place.
  81.     orl2    $EXPSIGN,r2    # set the exponent sign bit(to bias it).
  82.     orl2    r2,r0        # combine exponent & fraction.
  83.     bbc    $0,r4,sign_ok    # do we  have to set the sign bit?
  84.     orl2    $SIGNBIT,r0    # yes...
  85. sign_ok:
  86.     ret
  87.  
  88. retzero:
  89.     clrl     r0
  90.     ret
  91.  
  92. retmin:
  93.      movl    $0xd0000000,r0
  94.     ret
  95.