Linux-2.6.12-rc2
Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip!
Šī revīzija ir iekļauta:
141
arch/m68k/fpsp040/sgetem.S
Parasts fails
141
arch/m68k/fpsp040/sgetem.S
Parasts fails
@@ -0,0 +1,141 @@
|
||||
|
|
||||
| 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.h"
|
||||
|
||||
|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
|
Atsaukties uz šo jaunā problēmā
Block a user