[BACK]Return to sgetem.sa CVS log [TXT][DIR] Up to [local] / sys / arch / m68k / fpsp

Annotation of sys/arch/m68k/fpsp/sgetem.sa, Revision 1.1.1.1

1.1       nbrk        1: *      $OpenBSD: sgetem.sa,v 1.2 1996/05/29 21:05:37 niklas Exp $
                      2: *      $NetBSD: sgetem.sa,v 1.2 1994/10/26 07:49:45 cgd Exp $
                      3:
                      4: *      MOTOROLA MICROPROCESSOR & MEMORY TECHNOLOGY GROUP
                      5: *      M68000 Hi-Performance Microprocessor Division
                      6: *      M68040 Software Package
                      7: *
                      8: *      M68040 Software Package Copyright (c) 1993, 1994 Motorola Inc.
                      9: *      All rights reserved.
                     10: *
                     11: *      THE SOFTWARE is provided on an "AS IS" basis and without warranty.
                     12: *      To the maximum extent permitted by applicable law,
                     13: *      MOTOROLA DISCLAIMS ALL WARRANTIES WHETHER EXPRESS OR IMPLIED,
                     14: *      INCLUDING IMPLIED WARRANTIES OF MERCHANTABILITY OR FITNESS FOR A
                     15: *      PARTICULAR PURPOSE and any warranty against infringement with
                     16: *      regard to the SOFTWARE (INCLUDING ANY MODIFIED VERSIONS THEREOF)
                     17: *      and any accompanying written materials.
                     18: *
                     19: *      To the maximum extent permitted by applicable law,
                     20: *      IN NO EVENT SHALL MOTOROLA BE LIABLE FOR ANY DAMAGES WHATSOEVER
                     21: *      (INCLUDING WITHOUT LIMITATION, DAMAGES FOR LOSS OF BUSINESS
                     22: *      PROFITS, BUSINESS INTERRUPTION, LOSS OF BUSINESS INFORMATION, OR
                     23: *      OTHER PECUNIARY LOSS) ARISING OF THE USE OR INABILITY TO USE THE
                     24: *      SOFTWARE.  Motorola assumes no responsibility for the maintenance
                     25: *      and support of the SOFTWARE.
                     26: *
                     27: *      You are hereby granted a copyright license to use, modify, and
                     28: *      distribute the SOFTWARE so long as this entire notice is retained
                     29: *      without alteration in any modified and/or redistributed versions,
                     30: *      and that such modified versions are clearly identified as such.
                     31: *      No licenses are granted by implication, estoppel or otherwise
                     32: *      under any patents or trademarks of Motorola, Inc.
                     33:
                     34: *
                     35: *      sgetem.sa 3.1 12/10/90
                     36: *
                     37: *      The entry point sGETEXP returns the exponent portion
                     38: *      of the input argument.  The exponent bias is removed
                     39: *      and the exponent value is returned as an extended
                     40: *      precision number in fp0.  sGETEXPD handles denormalized
                     41: *      numbers.
                     42: *
                     43: *      The entry point sGETMAN extracts the mantissa of the
                     44: *      input argument.  The mantissa is converted to an
                     45: *      extended precision number and returned in fp0.  The
                     46: *      range of the result is [1.0 - 2.0).
                     47: *
                     48: *
                     49: *      Input:  Double-extended number X in the ETEMP space in
                     50: *              the floating-point save stack.
                     51: *
                     52: *      Output: The functions return exp(X) or man(X) in fp0.
                     53: *
                     54: *      Modified: fp0.
                     55: *
                     56:
                     57: SGETEM IDNT    2,1 Motorola 040 Floating Point Software Package
                     58:
                     59:        section 8
                     60:
                     61:        include fpsp.h
                     62:
                     63:        xref    nrm_set
                     64:
                     65: *
                     66: * This entry point is used by the unimplemented instruction exception
                     67: * handler.  It points a0 to the input operand.
                     68: *
                     69: *
                     70: *
                     71: *      SGETEXP
                     72: *
                     73:
                     74:        xdef    sgetexp
                     75: sgetexp:
                     76:        move.w  LOCAL_EX(a0),d0 ;get the exponent
                     77:        bclr.l  #15,d0          ;clear the sign bit
                     78:        sub.w   #$3fff,d0       ;subtract off the bias
                     79:        fmove.w  d0,fp0         ;move the exp to fp0
                     80:        rts
                     81:
                     82:        xdef    sgetexpd
                     83: sgetexpd:
                     84:        bclr.b  #sign_bit,LOCAL_EX(a0)
                     85:        bsr     nrm_set         ;normalize (exp will go negative)
                     86:        move.w  LOCAL_EX(a0),d0 ;load resulting exponent into d0
                     87:        sub.w   #$3fff,d0       ;subtract off the bias
                     88:        fmove.w d0,fp0          ;move the exp to fp0
                     89:        rts
                     90: *
                     91: *
                     92: * This entry point is used by the unimplemented instruction exception
                     93: * handler.  It points a0 to the input operand.
                     94: *
                     95: *
                     96: *
                     97: *      SGETMAN
                     98: *
                     99: *
                    100: * For normalized numbers, leave the mantissa alone, simply load
                    101: * with an exponent of +/- $3fff.
                    102: *
                    103:        xdef    sgetman
                    104: sgetman:
                    105:        move.l  USER_FPCR(a6),d0
                    106:        andi.l  #$ffffff00,d0   ;clear rounding precision and mode
                    107:        fmove.l d0,fpcr         ;this fpcr setting is used by the 882
                    108:        move.w  LOCAL_EX(a0),d0 ;get the exp (really just want sign bit)
                    109:        or.w    #$7fff,d0       ;clear old exp
                    110:        bclr.l  #14,d0          ;make it the new exp +-3fff
                    111:        move.w  d0,LOCAL_EX(a0) ;move the sign & exp back to fsave stack
                    112:        fmove.x (a0),fp0        ;put new value back in fp0
                    113:        rts
                    114:
                    115: *
                    116: * For denormalized numbers, shift the mantissa until the j-bit = 1,
                    117: * then load the exponent with +/1 $3fff.
                    118: *
                    119:        xdef    sgetmand
                    120: sgetmand:
                    121:        move.l  LOCAL_HI(a0),d0 ;load ms mant in d0
                    122:        move.l  LOCAL_LO(a0),d1 ;load ls mant in d1
                    123:        bsr     shft            ;shift mantissa bits till msbit is set
                    124:        move.l  d0,LOCAL_HI(a0) ;put ms mant back on stack
                    125:        move.l  d1,LOCAL_LO(a0) ;put ls mant back on stack
                    126:        bra.b   sgetman
                    127:
                    128: *
                    129: *      SHFT
                    130: *
                    131: *      Shifts the mantissa bits until msbit is set.
                    132: *      input:
                    133: *              ms mantissa part in d0
                    134: *              ls mantissa part in d1
                    135: *      output:
                    136: *              shifted bits in d0 and d1
                    137: shft:
                    138:        tst.l   d0              ;if any bits set in ms mant
                    139:        bne.b   upper           ;then branch
                    140: *                              ;else no bits set in ms mant
                    141:        tst.l   d1              ;test if any bits set in ls mant
                    142:        bne.b   cont            ;if set then continue
                    143:        bra.b   shft_end        ;else return
                    144: cont:
                    145:        move.l  d3,-(a7)        ;save d3
                    146:        exg     d0,d1           ;shift ls mant to ms mant
                    147:        bfffo   d0{0:32},d3     ;find first 1 in ls mant to d0
                    148:        lsl.l   d3,d0           ;shift first 1 to integer bit in ms mant
                    149:        move.l  (a7)+,d3        ;restore d3
                    150:        bra.b   shft_end
                    151: upper:
                    152:
                    153:        movem.l d3/d5/d6,-(a7)  ;save registers
                    154:        bfffo   d0{0:32},d3     ;find first 1 in ls mant to d0
                    155:        lsl.l   d3,d0           ;shift ms mant until j-bit is set
                    156:        move.l  d1,d6           ;save ls mant in d6
                    157:        lsl.l   d3,d1           ;shift ls mant by count
                    158:        move.l  #32,d5
                    159:        sub.l   d3,d5           ;sub 32 from shift for ls mant
                    160:        lsr.l   d5,d6           ;shift off all bits but those that will
                    161: *                              ;be shifted into ms mant
                    162:        or.l    d6,d0           ;shift the ls mant bits into the ms mant
                    163:        movem.l (a7)+,d3/d5/d6  ;restore registers
                    164: shft_end:
                    165:        rts
                    166:
                    167:        end

CVSweb