summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libcpu/m68k/m68040/fpsp/sgetem.S
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libcpu/m68k/m68040/fpsp/sgetem.S')
-rw-r--r--c/src/lib/libcpu/m68k/m68040/fpsp/sgetem.S143
1 files changed, 0 insertions, 143 deletions
diff --git a/c/src/lib/libcpu/m68k/m68040/fpsp/sgetem.S b/c/src/lib/libcpu/m68k/m68040/fpsp/sgetem.S
deleted file mode 100644
index c661058f3e..0000000000
--- a/c/src/lib/libcpu/m68k/m68040/fpsp/sgetem.S
+++ /dev/null
@@ -1,143 +0,0 @@
-#include "fpsp-namespace.h"
-//
-//
-// sgetem.sa 3.1 12/10/90
-//
-// The entry point sGETEXP returns the exponent portion
-// of the input argument. The exponent bias is removed
-// and the exponent value is returned as an extended
-// precision number in fp0. sGETEXPD handles denormalized
-// numbers.
-//
-// The entry point sGETMAN extracts the mantissa of the
-// input argument. The mantissa is converted to an
-// extended precision number and returned in fp0. The
-// range of the result is [1.0 - 2.0).
-//
-//
-// Input: Double-extended number X in the ETEMP space in
-// the floating-point save stack.
-//
-// Output: The functions return exp(X) or man(X) in fp0.
-//
-// Modified: fp0.
-//
-//
-// Copyright (C) Motorola, Inc. 1990
-// All Rights Reserved
-//
-// THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF MOTOROLA
-// The copyright notice above does not evidence any
-// actual or intended publication of such source code.
-
-//SGETEM idnt 2,1 | Motorola 040 Floating Point Software Package
-
- |section 8
-
-#include "fpsp.defs"
-
- |xref nrm_set
-
-//
-// This entry point is used by the unimplemented instruction exception
-// handler. It points a0 to the input operand.
-//
-//
-//
-// SGETEXP
-//
-
- .global sgetexp
-sgetexp:
- movew LOCAL_EX(%a0),%d0 //get the exponent
- bclrl #15,%d0 //clear the sign bit
- subw #0x3fff,%d0 //subtract off the bias
- fmovew %d0,%fp0 //move the exp to fp0
- rts
-
- .global sgetexpd
-sgetexpd:
- bclrb #sign_bit,LOCAL_EX(%a0)
- bsr nrm_set //normalize (exp will go negative)
- movew LOCAL_EX(%a0),%d0 //load resulting exponent into d0
- subw #0x3fff,%d0 //subtract off the bias
- fmovew %d0,%fp0 //move the exp to fp0
- rts
-//
-//
-// This entry point is used by the unimplemented instruction exception
-// handler. It points a0 to the input operand.
-//
-//
-//
-// SGETMAN
-//
-//
-// For normalized numbers, leave the mantissa alone, simply load
-// with an exponent of +/- $3fff.
-//
- .global sgetman
-sgetman:
- movel USER_FPCR(%a6),%d0
- andil #0xffffff00,%d0 //clear rounding precision and mode
- fmovel %d0,%fpcr //this fpcr setting is used by the 882
- movew LOCAL_EX(%a0),%d0 //get the exp (really just want sign bit)
- orw #0x7fff,%d0 //clear old exp
- bclrl #14,%d0 //make it the new exp +-3fff
- movew %d0,LOCAL_EX(%a0) //move the sign & exp back to fsave stack
- fmovex (%a0),%fp0 //put new value back in fp0
- rts
-
-//
-// For denormalized numbers, shift the mantissa until the j-bit = 1,
-// then load the exponent with +/1 $3fff.
-//
- .global sgetmand
-sgetmand:
- movel LOCAL_HI(%a0),%d0 //load ms mant in d0
- movel LOCAL_LO(%a0),%d1 //load ls mant in d1
- bsr shft //shift mantissa bits till msbit is set
- movel %d0,LOCAL_HI(%a0) //put ms mant back on stack
- movel %d1,LOCAL_LO(%a0) //put ls mant back on stack
- bras sgetman
-
-//
-// SHFT
-//
-// Shifts the mantissa bits until msbit is set.
-// input:
-// ms mantissa part in d0
-// ls mantissa part in d1
-// output:
-// shifted bits in d0 and d1
-shft:
- tstl %d0 //if any bits set in ms mant
- bnes upper //then branch
-// ;else no bits set in ms mant
- tstl %d1 //test if any bits set in ls mant
- bnes cont //if set then continue
- bras shft_end //else return
-cont:
- movel %d3,-(%a7) //save d3
- exg %d0,%d1 //shift ls mant to ms mant
- bfffo %d0{#0:#32},%d3 //find first 1 in ls mant to d0
- lsll %d3,%d0 //shift first 1 to integer bit in ms mant
- movel (%a7)+,%d3 //restore d3
- bras shft_end
-upper:
-
- moveml %d3/%d5/%d6,-(%a7) //save registers
- bfffo %d0{#0:#32},%d3 //find first 1 in ls mant to d0
- lsll %d3,%d0 //shift ms mant until j-bit is set
- movel %d1,%d6 //save ls mant in d6
- lsll %d3,%d1 //shift ls mant by count
- movel #32,%d5
- subl %d3,%d5 //sub 32 from shift for ls mant
- lsrl %d5,%d6 //shift off all bits but those that will
-// ;be shifted into ms mant
- orl %d6,%d0 //shift the ls mant bits into the ms mant
- moveml (%a7)+,%d3/%d5/%d6 //restore registers
-shft_end:
- rts
-
- |end