2005-04-17 02:20:36 +04:00
|
| sgetem. s a 3 . 1 1 2 / 1 0 / 9 0
|
| The e n t r y p o i n t s G E T E X P r e t u r n s t h e e x p o n e n t p o r t i o n
| of t h e i n p u t a r g u m e n t . T h e e x p o n e n t b i a s i s r e m o v e d
| and t h e e x p o n e n t v a l u e i s r e t u r n e d a s a n e x t e n d e d
| precision n u m b e r i n f p0 . s G E T E X P D h a n d l e s d e n o r m a l i z e d
| numbers.
|
| The e n t r y p o i n t s G E T M A N e x t r a c t s t h e m a n t i s s a o f t h e
| input a r g u m e n t . T h e m a n t i s s a i s c o n v e r t e d t o a n
| extended p r e c i s i o n n u m b e r a n d r e t u r n e d i n f p0 . T h e
| range o f t h e r e s u l t i s [ 1 . 0 - 2 . 0 ) .
|
|
| Input : Double- e x t e n d e d n u m b e r X i n t h e E T E M P s p a c e i n
| the f l o a t i n g - p o i n t s a v e s t a c k .
|
| Output : The f u n c t i o n s r e t u r n e x p ( X ) o r m a n ( X ) i n f p0 .
|
| Modified : fp0 .
|
|
| Copyright ( C ) M o t o r o l a , I n c . 1 9 9 0
| All R i g h t s R e s e r v e d
|
2006-02-12 04:55:48 +03:00
| For d e t a i l s o n t h e l i c e n s e f o r t h i s f i l e , p l e a s e s e e t h e
| file, R E A D M E , i n t h i s s a m e d i r e c t o r y .
2005-04-17 02:20:36 +04:00
| SGETEM i d n t 2 ,1 | M o t o r o l a 0 4 0 F l o a t i n g P o i n t S o f t w a r e P a c k a g e
| section 8
# include " f p s p . h "
| xref n r m _ s e t
|
| This e n t r y p o i n t i s u s e d b y t h e u n i m p l e m e n t e d i n s t r u c t i o n e x c e p t i o n
| handler. I t p o i n t s a0 t o t h e i n p u t o p e r a n d .
|
|
|
| SGETEXP
|
.global sgetexp
sgetexp :
movew L O C A L _ E X ( % a0 ) ,% d0 | g e t t h e e x p o n e n t
bclrl #15 ,% d0 | c l e a r t h e s i g n b i t
subw #0x3fff ,% d0 | s u b t r a c t o f f t h e b i a s
fmovew % d0 ,% f p0 | m o v e t h e e x p t o f p0
rts
.global sgetexpd
sgetexpd :
bclrb #s i g n _ b i t , L O C A L _ E X ( % a 0 )
bsr n r m _ s e t | n o r m a l i z e ( e x p w i l l g o n e g a t i v e )
movew L O C A L _ E X ( % a0 ) ,% d0 | l o a d r e s u l t i n g e x p o n e n t i n t o d0
subw #0x3fff ,% d0 | s u b t r a c t o f f t h e b i a s
fmovew % d0 ,% f p0 | m o v e t h e e x p t o f p0
rts
|
|
| This e n t r y p o i n t i s u s e d b y t h e u n i m p l e m e n t e d i n s t r u c t i o n e x c e p t i o n
| handler. I t p o i n t s a0 t o t h e i n p u t o p e r a n d .
|
|
|
| SGETMAN
|
|
| For n o r m a l i z e d n u m b e r s , l e a v e t h e m a n t i s s a a l o n e , s i m p l y l o a d
| with a n e x p o n e n t o f + / - $ 3 f f f .
|
.global sgetman
sgetman :
movel U S E R _ F P C R ( % a6 ) ,% d0
andil #0xffffff00 ,% d0 | c l e a r r o u n d i n g p r e c i s i o n a n d m o d e
fmovel % d0 ,% f p c r | t h i s f p c r s e t t i n g i s u s e d b y t h e 8 8 2
movew L O C A L _ E X ( % a0 ) ,% d0 | g e t t h e e x p ( r e a l l y j u s t w a n t s i g n b i t )
orw #0x7fff ,% d0 | c l e a r o l d e x p
bclrl #14 ,% d0 | m a k e i t t h e n e w e x p + - 3 f f f
movew % d0 ,L O C A L _ E X ( % a0 ) | m o v e t h e s i g n & e x p b a c k t o f s a v e s t a c k
fmovex ( % a0 ) ,% f p0 | p u t n e w v a l u e b a c k i n f p0
rts
|
| For d e n o r m a l i z e d n u m b e r s , s h i f t t h e m a n t i s s a u n t i l t h e j - b i t = 1 ,
| then l o a d t h e e x p o n e n t w i t h + / 1 $ 3 f f f .
|
.global sgetmand
sgetmand :
movel L O C A L _ H I ( % a0 ) ,% d0 | l o a d m s m a n t i n d0
movel L O C A L _ L O ( % a0 ) ,% d1 | l o a d l s m a n t i n d1
bsr s h f t | s h i f t m a n t i s s a b i t s t i l l m s b i t i s s e t
movel % d0 ,L O C A L _ H I ( % a0 ) | p u t m s m a n t b a c k o n s t a c k
movel % d1 ,L O C A L _ L O ( % a0 ) | p u t l s m a n t b a c k o n s t a c k
bras s g e t m a n
|
| SHFT
|
| Shifts t h e m a n t i s s a b i t s u n t i l m s b i t i s s e t .
| input :
| ms m a n t i s s a p a r t i n d0
| ls m a n t i s s a p a r t i n d1
| output :
| shifted b i t s i n d0 a n d d1
shft :
tstl % d0 | i f a n y b i t s s e t i n m s m a n t
bnes u p p e r | t h e n b r a n c h
| ;else no bits set in ms mant
tstl % d1 | t e s t i f a n y b i t s s e t i n l s m a n t
bnes c o n t | i f s e t t h e n c o n t i n u e
bras s h f t _ e n d | e l s e r e t u r n
cont :
movel % d3 ,- ( % a7 ) | s a v e d3
exg % d0 ,% d1 | s h i f t l s m a n t t o m s m a n t
bfffo % d0 { #0 : #32 } ,% d3 | f i n d f i r s t 1 i n l s m a n t t o d0
lsll % d3 ,% d0 | s h i f t f i r s t 1 t o i n t e g e r b i t i n m s m a n t
movel ( % a7 ) + ,% d3 | r e s t o r e d3
bras s h f t _ e n d
upper :
moveml % d3 / % d5 / % d6 ,- ( % a7 ) | s a v e r e g i s t e r s
bfffo % d0 { #0 : #32 } ,% d3 | f i n d f i r s t 1 i n l s m a n t t o d0
lsll % d3 ,% d0 | s h i f t m s m a n t u n t i l j - b i t i s s e t
movel % d1 ,% d6 | s a v e l s m a n t i n d6
lsll % d3 ,% d1 | s h i f t l s m a n t b y c o u n t
movel #32 ,% d5
subl % d3 ,% d5 | s u b 3 2 f r o m s h i f t f o r l s m a n t
lsrl % d5 ,% d6 | s h i f t o f f a l l b i t s b u t t h o s e t h a t w i l l
| ;be shifted into ms mant
orl % d6 ,% d0 | s h i f t t h e l s m a n t b i t s i n t o t h e m s m a n t
moveml ( % a7 ) + ,% d3 / % d5 / % d6 | r e s t o r e r e g i s t e r s
shft_end :
rts
| end