2005-04-17 02:20:36 +04:00
|
| x_ u n s u p p . s a 3 . 3 7 / 1 / 9 1
|
| fpsp_ u n s u p p - - - F P S P h a n d l e r f o r u n s u p p o r t e d d a t a t y p e e x c e p t i o n
|
| Trap v e c t o r #55 ( S e e t a b l e 8 - 1 M c68 0 3 0 U s e r ' s m a n u a l ) .
| Invoked w h e n t h e u s e r p r o g r a m e n c o u n t e r s a d a t a f o r m a t ( p a c k e d ) t h a t
| hardware d o e s n o t s u p p o r t o r a d a t a t y p e ( d e n o r m a l i z e d n u m b e r s o r u n -
| normalized n u m b e r s ) .
| Normalizes d e n o r m s a n d u n n o r m s , u n p a c k s p a c k e d n u m b e r s t h e n s t o r e s
| them b a c k i n t o t h e m a c h i n e t o l e t t h e 0 4 0 f i n i s h t h e o p e r a t i o n .
|
| Unsupp c a l l s t w o r o u t i n e s :
| 1 . get_ o p - g e t s t h e o p e r a n d ( s )
| 2 . res_ f u n c - r e s t o r e t h e f u n c t i o n b a c k i n t o t h e 0 4 0 o r
| if f m o v e . p f p m ,< e a > t h e n p a c k s o u r c e ( f p m )
| and s t o r e i n u s e r s m e m o r y < e a > .
|
| Input : Long f s a v e s t a c k f r a m e
|
|
| 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
X_UNSUPP : | idnt 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 g e t _ o p
| xref r e s _ f u n c
| xref g e n _ e x c e p t
| xref f p s p _ f m t _ e r r o r
.global fpsp_unsupp
fpsp_unsupp :
|
link % a6 ,#- L O C A L _ S I Z E
fsave - ( % a7 )
moveml % d0 - % d1 / % a0 - % a1 ,U S E R _ D A ( % a6 )
fmovemx % f p0 - % f p3 ,U S E R _ F P 0 ( % a6 )
fmoveml % f p c r / % f p s r / % f p i a r ,U S E R _ F P C R ( % a6 )
moveb ( % a7 ) ,V E R _ T M P ( % a6 ) | s a v e v e r s i o n n u m b e r
moveb ( % a7 ) ,% d0 | t e s t f o r v a l i d v e r s i o n n u m
andib #0xf0 ,% d0 | t e s t f o r $ 4 x
cmpib #V E R _ 4 ,% d0 | m u s t b e $ 4 x o r e x i t
bnel f p s p _ f m t _ e r r o r
fmovel #0 ,% F P S R | c l e a r a l l u s e r s t a t u s b i t s
fmovel #0 ,% F P C R | c l e a r a l l u s e r c o n t r o l b i t s
|
| The f o l l o w i n g l i n e s a r e u s e d t o e n s u r e t h a t t h e F P S R
| exception b y t e a n d c o n d i t i o n c o d e s a r e c l e a r b e f o r e p r o c e e d i n g ,
| except i n t h e c a s e o f f m o v e , w h i c h l e a v e s t h e c c ' s i n t a c t .
|
unsupp_con :
movel U S E R _ F P S R ( % a6 ) ,% d1
btst #5 ,C M D R E G 1 B ( % a6 ) | l o o k i n g f o r f m o v e o u t
bne f m o v e _ c o n
andl #0xFF00FF ,% d1 | c l e a r a l l b u t a e x c s a n d q b y t e
bras e n d _ f i x
fmove_con :
andl #0x0FFF40FF ,% d1 | c l e a r a l l b u t c c ' s , s n a n b i t , a e x c s , a n d q b y t e
end_fix :
movel % d1 ,U S E R _ F P S R ( % a6 )
st U F L G _ T M P ( % a6 ) | s e t f l a g f o r u n s u p p d a t a
bsrl g e t _ o p | e v e r y t h i n g o k a y , g o g e t o p e r a n d ( s )
bsrl r e s _ f u n c | f i x u p s t a c k f r a m e s o c a n r e s t o r e i t
clrl - ( % a7 )
moveb V E R _ T M P ( % a6 ) ,( % a7 ) | m o v e i d l e f m t w o r d t o t o p o f s t a c k
bral g e n _ e x c e p t
|
| end