2005-04-16 15:20:36 -07:00
|
| stwotox. s a 3 . 1 1 2 / 1 0 / 9 0
|
| stwotox - - - 2 * * X
| stwotoxd - - - 2 * * X f o r d e n o r m a l i z e d X
| stentox - - - 1 0 * * X
| stentoxd - - - 1 0 * * X f o r d e n o r m a l i z e d X
|
| Input : Double- e x t e n d e d n u m b e r X i n l o c a t i o n p o i n t e d t o
| by a d d r e s s r e g i s t e r a0 .
|
| Output : The f u n c t i o n v a l u e s a r e r e t u r n e d i n F p0 .
|
| Accuracy a n d M o n o t o n i c i t y : T h e r e t u r n e d r e s u l t i s w i t h i n 2 u l p s i n
| 6 4 significant b i t , i . e . w i t h i n 0 . 5 0 0 1 u l p t o 5 3 b i t s i f t h e
| result i s s u b s e q u e n t l y r o u n d e d t o d o u b l e p r e c i s i o n . T h e
| result i s p r o v a b l y m o n o t o n i c i n d o u b l e p r e c i s i o n .
|
| Speed : The p r o g r a m s t w o t o x t a k e s a p p r o x i m a t e l y 1 9 0 c y c l e s a n d t h e
| program s t e n t o x t a k e s a p p r o x i m a t e l y 2 0 0 c y c l e s .
|
| Algorithm :
|
| twotox
| 1 . If | X | > 1 6 4 8 0 , g o t o E x p B i g .
|
| 2 . If | X | < 2 * * ( - 7 0 ) , g o t o E x p S m .
|
| 3 . Decompose X a s X = N / 6 4 + r w h e r e | r | < = 1 / 1 2 8 . F u r t h e r m o r e
| decompose N a s
| N = 6 4 ( M + M ' ) + j , j = 0 ,1 ,2 ,. . . ,6 3 .
|
| 4 . Overwrite r : = r * l o g 2 . T h e n
| 2 * * X = 2 * * ( M ' ) * 2 * * ( M ) * 2 * * ( j / 6 4 ) * e x p ( r ) .
| Go t o e x p r t o c o m p u t e t h a t e x p r e s s i o n .
|
| tentox
| 1 . If | X | > 1 6 4 8 0 * l o g _ 1 0 ( 2 ) ( b a s e 1 0 l o g o f 2 ) , g o t o E x p B i g .
|
| 2 . If | X | < 2 * * ( - 7 0 ) , g o t o E x p S m .
|
| 3 . Set y : = X * l o g _ 2 ( 1 0 ) * 6 4 ( b a s e 2 l o g o f 1 0 ) . S e t
| N : = r o u n d - t o - i n t ( y ) . D e c o m p o s e N a s
| N = 6 4 ( M + M ' ) + j , j = 0 ,1 ,2 ,. . . ,6 3 .
|
| 4 . Define r a s
| r : = ( ( X - N * L 1 ) - N * L 2 ) * L 1 0
| where L 1 , L 2 a r e t h e l e a d i n g a n d t r a i l i n g p a r t s o f l o g _ 1 0 ( 2 ) / 6 4
| and L 1 0 i s t h e n a t u r a l l o g o f 1 0 . T h e n
| 1 0 * * X = 2 * * ( M ' ) * 2 * * ( M ) * 2 * * ( j / 6 4 ) * e x p ( r ) .
| Go t o e x p r t o c o m p u t e t h a t e x p r e s s i o n .
|
| expr
| 1 . Fetch 2 * * ( j / 6 4 ) f r o m t a b l e a s F a c t 1 a n d F a c t 2 .
|
| 2 . Overwrite F a c t 1 a n d F a c t 2 b y
| Fact1 : = 2 * * ( M ) * F a c t 1
| Fact2 : = 2 * * ( M ) * F a c t 2
| Thus F a c t 1 + F a c t 2 = 2 * * ( M ) * 2 * * ( j / 6 4 ) .
|
| 3 . Calculate P w h e r e 1 + P a p p r o x i m a t e s e x p ( r ) :
| P = r + r * r * ( A 1 + r * ( A 2 + . . . + r * A 5 ) ) .
|
| 4 . Let A d j F a c t : = 2 * * ( M ' ) . R e t u r n
| AdjFact * ( F a c t 1 + ( ( F a c t 1 * P ) + F a c t 2 ) ) .
| Exit.
|
| ExpBig
| 1 . Generate o v e r f l o w b y H u g e * H u g e i f X > 0 ; otherwise, generate
| underflow b y T i n y * T i n y .
|
| ExpSm
| 1 . Return 1 + X .
|
| 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-11 17:55:48 -08: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-16 15:20:36 -07:00
| STWOTOX 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 "
BOUNDS1 : .long 0x3FB98000 , 0 x4 0 0 D 8 0 C 0 | . . . 2 ^ ( - 7 0 ) ,1 6 4 8 0
BOUNDS2 : .long 0x3FB98000 , 0 x4 0 0 B 9 B 0 7 | . . . 2 ^ ( - 7 0 ) ,1 6 4 8 0 L O G 2 / L O G 1 0
L2TEN64 : .long 0x406A934F , 0 x0 9 7 9 A 3 7 1 | . . . 6 4 L O G 1 0 / L O G 2
L10TWO1 : .long 0x3F734413 , 0 x5 0 9 F 8 0 0 0 | . . . L O G 2 / 6 4 L O G 1 0
L10TWO2 : .long 0xBFCD0000 , 0 xC0 2 1 9 D C 1 ,0 x D A 9 9 4 F D 2 ,0 x00 0 0 0 0 0 0
LOG10 : .long 0x40000000 , 0 x9 3 5 D 8 D D D ,0 x A A A 8 A C 1 7 ,0 x00 0 0 0 0 0 0
LOG2 : .long 0x3FFE0000 , 0 xB1 7 2 1 7 F 7 ,0 x D 1 C F 7 9 A C ,0 x00 0 0 0 0 0 0
EXPA5 : .long 0x3F56C16D , 0 x6 F 7 B D 0 B 2
EXPA4 : .long 0x3F811112 , 0 x3 0 2 C 7 1 2 C
EXPA3 : .long 0x3FA55555 , 0 x5 5 5 5 4 C C 1
EXPA2 : .long 0x3FC55555 , 0 x5 5 5 5 4 A 5 4
EXPA1 : .long 0x3FE00000 , 0 x0 0 0 0 0 0 0 0 ,0 x00 0 0 0 0 0 0 ,0 x00 0 0 0 0 0 0
HUGE : .long 0x7FFE0000 , 0 xFFFFFFFF,0 x F F F F F F F F ,0 x00 0 0 0 0 0 0
TINY : .long 0x00010000 , 0 xFFFFFFFF,0 x F F F F F F F F ,0 x00 0 0 0 0 0 0
EXPTBL :
.long 0 x3 F F F 0 0 0 0 ,0 x80 0 0 0 0 0 0 ,0 x00 0 0 0 0 0 0 ,0 x3 F 7 3 8 0 0 0
.long 0 x3 F F F 0 0 0 0 ,0 x81 6 4 D 1 F 3 ,0 x B C 0 3 0 7 7 3 ,0 x3 F B E F 7 C A
.long 0 x3 F F F 0 0 0 0 ,0 x82 C D 8 6 9 8 ,0 x A C 2 B A 1 D 7 ,0 x3 F B D F 8 A 9
.long 0 x3 F F F 0 0 0 0 ,0 x84 3 A 2 8 C 3 ,0 x A C D E 4 0 4 6 ,0 x3 F B C D 7 C 9
.long 0 x3 F F F 0 0 0 0 ,0 x85 A A C 3 6 7 ,0 x C C 4 8 7 B 1 5 ,0 x B F B D E 8 D A
.long 0 x3 F F F 0 0 0 0 ,0 x87 1 F 6 1 9 6 ,0 x9 E 8 D 1 0 1 0 ,0 x3 F B D E 8 5 C
.long 0 x3 F F F 0 0 0 0 ,0 x88 9 8 0 E 8 0 ,0 x92 D A 8 5 2 7 ,0 x3 F B E B B F 1
.long 0 x3 F F F 0 0 0 0 ,0 x8 A 1 4 D 5 7 5 ,0 x49 6 E F D 9 A ,0 x3 F B B 8 0 C A
.long 0 x3 F F F 0 0 0 0 ,0 x8 B 9 5 C 1 E 3 ,0 x E A 8 B D 6 E 7 ,0 x B F B A 8 3 7 3
.long 0 x3 F F F 0 0 0 0 ,0 x8 D 1 A D F 5 B ,0 x7 E 5 B A 9 E 6 ,0 x B F B E 9 6 7 0
.long 0 x3 F F F 0 0 0 0 ,0 x8 E A 4 3 9 8 B ,0 x45 C D 5 3 C 0 ,0 x3 F B D B 7 0 0
.long 0 x3 F F F 0 0 0 0 ,0 x90 3 1 D C 4 3 ,0 x14 6 6 B 1 D C ,0 x3 F B E E E B 0
.long 0 x3 F F F 0 0 0 0 ,0 x91 C 3 D 3 7 3 ,0 x A B 1 1 C 3 3 6 ,0 x3 F B B F D 6 D
.long 0 x3 F F F 0 0 0 0 ,0 x93 5 A 2 B 2 F ,0 x13 E 6 E 9 2 C ,0 x B F B D B 3 1 9
.long 0 x3 F F F 0 0 0 0 ,0 x94 F 4 E F A 8 ,0 x F E F 7 0 9 6 1 ,0 x3 F B D B A 2 B
.long 0 x3 F F F 0 0 0 0 ,0 x96 9 4 2 D 3 7 ,0 x20 1 8 5 A 0 0 ,0 x3 F B E 9 1 D 5
.long 0 x3 F F F 0 0 0 0 ,0 x98 3 7 F 0 5 1 ,0 x8 D B 8 A 9 6 F ,0 x3 F B E 8 D 5 A
.long 0 x3 F F F 0 0 0 0 ,0 x99 E 0 4 5 9 3 ,0 x20 B 7 F A 6 5 ,0 x B F B C D E 7 B
.long 0 x3 F F F 0 0 0 0 ,0 x9 B 8 D 3 9 B 9 ,0 x D 5 4 E 5 5 3 9 ,0 x B F B E B A A F
.long 0 x3 F F F 0 0 0 0 ,0 x9 D 3 E D 9 A 7 ,0 x2 C F F B 7 5 1 ,0 x B F B D 8 6 D A
.long 0 x3 F F F 0 0 0 0 ,0 x9 E F 5 3 2 6 0 ,0 x91 A 1 1 1 A E ,0 x B F B E B E D D
.long 0 x3 F F F 0 0 0 0 ,0 x A 0 B 0 5 1 0 F ,0 x B 9 7 1 4 F C 2 ,0 x3 F B C C 9 6 E
.long 0 x3 F F F 0 0 0 0 ,0 x A 2 7 0 4 3 0 3 ,0 x0 C 4 9 6 8 1 9 ,0 x B F B E C 9 0 B
.long 0 x3 F F F 0 0 0 0 ,0 x A 4 3 5 1 5 A E ,0 x09 E 6 8 0 9 E ,0 x3 F B B D 1 D B
.long 0 x3 F F F 0 0 0 0 ,0 x A 5 F E D 6 A 9 ,0 x B 1 5 1 3 8 E A ,0 x3 F B C E 5 E B
.long 0 x3 F F F 0 0 0 0 ,0 x A 7 C D 9 3 B 4 ,0 x E 9 6 5 3 5 6 A ,0 x B F B E C 2 7 4
.long 0 x3 F F F 0 0 0 0 ,0 x A 9 A 1 5 A B 4 ,0 x E A 7 C 0 E F 8 ,0 x3 F B E A 8 3 C
.long 0 x3 F F F 0 0 0 0 ,0 x A B 7 A 3 9 B 5 ,0 x A 9 3 E D 3 3 7 ,0 x3 F B E C B 0 0
.long 0 x3 F F F 0 0 0 0 ,0 x A D 5 8 3 E E A ,0 x42 A 1 4 A C 6 ,0 x3 F B E 9 3 0 1
.long 0 x3 F F F 0 0 0 0 ,0 x A F 3 B 7 8 A D ,0 x69 0 A 4 3 7 5 ,0 x B F B D 8 3 6 7
.long 0 x3 F F F 0 0 0 0 ,0 x B 1 2 3 F 5 8 1 ,0 x D 2 A C 2 5 9 0 ,0 x B F B E F 0 5 F
.long 0 x3 F F F 0 0 0 0 ,0 x B 3 1 1 C 4 1 2 ,0 x A 9 1 1 2 4 8 9 ,0 x3 F B D F B 3 C
.long 0 x3 F F F 0 0 0 0 ,0 x B 5 0 4 F 3 3 3 ,0 x F 9 D E 6 4 8 4 ,0 x3 F B E B 2 F B
.long 0 x3 F F F 0 0 0 0 ,0 x B 6 F D 9 1 E 3 ,0 x28 D 1 7 7 9 1 ,0 x3 F B A E 2 C B
.long 0 x3 F F F 0 0 0 0 ,0 x B 8 F B A F 4 7 ,0 x62 F B 9 E E 9 ,0 x3 F B C D C 3 C
.long 0 x3 F F F 0 0 0 0 ,0 x B A F F 5 A B 2 ,0 x13 3 E 4 5 F B ,0 x3 F B E E 9 A A
.long 0 x3 F F F 0 0 0 0 ,0 x B D 0 8 A 3 9 F ,0 x58 0 C 3 6 B F ,0 x B F B E A E F D
.long 0 x3 F F F 0 0 0 0 ,0 x B F 1 7 9 9 B 6 ,0 x7 A 7 3 1 0 8 3 ,0 x B F B C B F 5 1
.long 0 x3 F F F 0 0 0 0 ,0 x C 1 2 C 4 C C A ,0 x66 7 0 9 4 5 6 ,0 x3 F B E F 8 8 A
.long 0 x3 F F F 0 0 0 0 ,0 x C 3 4 6 C C D A ,0 x24 9 7 6 4 0 7 ,0 x3 F B D 8 3 B 2
.long 0 x3 F F F 0 0 0 0 ,0 x C 5 6 7 2 A 1 1 ,0 x55 0 6 D A D D ,0 x3 F B D F 8 A B
.long 0 x3 F F F 0 0 0 0 ,0 x C 7 8 D 7 4 C 8 ,0 x A B B 9 B 1 5 D ,0 x B F B D F B 1 7
.long 0 x3 F F F 0 0 0 0 ,0 x C 9 B 9 B D 8 6 ,0 x6 E 2 F 2 7 A 3 ,0 x B F B E F E 3 C
.long 0 x3 F F F 0 0 0 0 ,0 x C B E C 1 4 F E ,0 x F 2 7 2 7 C 5 D ,0 x B F B B B 6 F 8
.long 0 x3 F F F 0 0 0 0 ,0 x C E 2 4 8 C 1 5 ,0 x1 F 8 4 8 0 E 4 ,0 x B F B C E E 5 3
.long 0 x3 F F F 0 0 0 0 ,0 x D 0 6 3 3 3 D A ,0 x E F 2 B 2 5 9 5 ,0 x B F B D A 4 A E
.long 0 x3 F F F 0 0 0 0 ,0 x D 2 A 8 1 D 9 1 ,0 x F 1 2 A E 4 5 A ,0 x3 F B C 9 1 2 4
.long 0 x3 F F F 0 0 0 0 ,0 x D 4 F 3 5 A A B ,0 x C F E D F A 1 F ,0 x3 F B E B 2 4 3
.long 0 x3 F F F 0 0 0 0 ,0 x D 7 4 4 F C C A ,0 x D 6 9 D 6 A F 4 ,0 x3 F B D E 6 9 A
.long 0 x3 F F F 0 0 0 0 ,0 x D 9 9 D 1 5 C 2 ,0 x78 A F D 7 B 6 ,0 x B F B 8 B C 6 1
.long 0 x3 F F F 0 0 0 0 ,0 x D B F B B 7 9 7 ,0 x D A F 2 3 7 5 5 ,0 x3 F B D F 6 1 0
.long 0 x3 F F F 0 0 0 0 ,0 x D E 6 0 F 4 8 2 ,0 x5 E 0 E 9 1 2 4 ,0 x B F B D 8 B E 1
.long 0 x3 F F F 0 0 0 0 ,0 x E 0 C C D E E C ,0 x2 A 9 4 E 1 1 1 ,0 x3 F B A C B 1 2
.long 0 x3 F F F 0 0 0 0 ,0 x E 3 3 F 8 9 7 2 ,0 x B E 8 A 5 A 5 1 ,0 x3 F B B 9 B F E
.long 0 x3 F F F 0 0 0 0 ,0 x E 5 B 9 0 6 E 7 ,0 x7 C 8 3 4 8 A 8 ,0 x3 F B C F 2 F 4
.long 0 x3 F F F 0 0 0 0 ,0 x E 8 3 9 6 A 5 0 ,0 x3 C 4 B D C 6 8 ,0 x3 F B E F 2 2 F
.long 0 x3 F F F 0 0 0 0 ,0 x E A C 0 C 6 E 7 ,0 x D D 2 4 3 9 2 F ,0 x B F B D B F 4 A
.long 0 x3 F F F 0 0 0 0 ,0 x E D 4 F 3 0 1 E ,0 x D 9 9 4 2 B 8 4 ,0 x3 F B E C 0 1 A
.long 0 x3 F F F 0 0 0 0 ,0 x E F E 4 B 9 9 B ,0 x D C D A F 5 C B ,0 x3 F B E 8 C A C
.long 0 x3 F F F 0 0 0 0 ,0 x F 2 8 1 7 7 3 C ,0 x59 F F B 1 3 A ,0 x B F B C B B 3 F
.long 0 x3 F F F 0 0 0 0 ,0 x F 5 2 5 7 D 1 5 ,0 x24 8 6 C C 2 C ,0 x3 F B E F 7 3 A
.long 0 x3 F F F 0 0 0 0 ,0 x F 7 D 0 D F 7 3 ,0 x0 A D 1 3 B B 9 ,0 x B F B 8 B 7 9 5
.long 0 x3 F F F 0 0 0 0 ,0 x F A 8 3 B 2 D B ,0 x72 2 A 0 3 3 A ,0 x3 F B E F 8 4 B
.long 0 x3 F F F 0 0 0 0 ,0 x F D 3 E 0 C 0 C ,0 x F 4 8 6 C 1 7 5 ,0 x B F B E F 5 8 1
.set N,L _ S C R 1
.set X,F P _ S C R 1
.set XDCARE,X + 2
.set XFRAC,X + 4
.set ADJFACT,F P _ S C R 2
.set FACT1 ,F P _ S C R 3
.set FACT1 H I ,F A C T 1 + 4
.set FACT1 L O W ,F A C T 1 + 8
.set FACT2 ,F P _ S C R 4
.set FACT2 H I ,F A C T 2 + 4
.set FACT2 L O W ,F A C T 2 + 8
| xref t _ u n f l
| xref t _ o v f l
| xref t _ f r c i n x
.global stwotoxd
stwotoxd :
| - - ENTRY P O I N T F O R 2 * * ( X ) F O R D E N O R M A L I Z E D A R G U M E N T
fmovel % d1 ,% f p c r | . . . s e t u s e r ' s r o u n d i n g m o d e / p r e c i s i o n
fmoves #0x3F800000 ,% f p0 | . . . R E T U R N 1 + X
movel ( % a0 ) ,% d0
orl #0x00800001 ,% d0
fadds % d0 ,% f p0
bra t _ f r c i n x
.global stwotox
stwotox :
| - - ENTRY P O I N T F O R 2 * * ( X ) , H E R E X I S F I N I T E , N O N - Z E R O , A N D N O T N A N ' S
fmovemx ( % a0 ) ,% f p0 - % f p0 | . . . L O A D I N P U T , d o n o t s e t c c ' s
movel ( % a0 ) ,% d0
movew 4 ( % a0 ) ,% d0
fmovex % f p0 ,X ( % a6 )
andil #0x7FFFFFFF ,% d0
cmpil #0x3FB98000 ,% d0 | . . . | X | > = 2 * * ( - 7 0 ) ?
bges T W O O K 1
bra E X P B O R S
TWOOK1 :
cmpil #0x400D80C0 ,% d0 | . . . | X | > 1 6 4 8 0 ?
bles T W O M A I N
bra E X P B O R S
TWOMAIN :
| - - USUAL C A S E , 2 ^ ( - 7 0 ) < = | X | < = 1 6 4 8 0
fmovex % f p0 ,% f p1
fmuls #0x42800000 ,% f p1 | . . . 6 4 * X
fmovel % f p1 ,N ( % a6 ) | . . . N = R O U N D - T O - I N T ( 6 4 X )
movel % d2 ,- ( % s p )
lea E X P T B L ,% a1 | . . . L O A D A D D R E S S O F T A B L E O F 2 ^ ( J / 6 4 )
fmovel N ( % a6 ) ,% f p1 | . . . N - - > F L O A T I N G F M T
movel N ( % a6 ) ,% d0
movel % d0 ,% d2
andil #0x3F ,% d0 | . . . D 0 I S J
asll #4 ,% d0 | . . . D I S P L A C E M E N T F O R 2 ^ ( J / 6 4 )
addal % d0 ,% a1 | . . . A D D R E S S F O R 2 ^ ( J / 6 4 )
asrl #6 ,% d2 | . . . d2 I S L , N = 6 4 L + J
movel % d2 ,% d0
asrl #1 ,% d0 | . . . D 0 I S M
subl % d0 ,% d2 | . . . d2 I S M ' , N = 6 4 ( M + M ' ) + J
addil #0x3FFF ,% d2
movew % d2 ,A D J F A C T ( % a6 ) | . . . A D J F A C T I S 2 ^ ( M ' )
movel ( % s p ) + ,% d2
| - - SUMMARY : a1 I S A D D R E S S F O R T H E L E A D I N G P O R T I O N O F 2 ^ ( J / 6 4 ) ,
| - - D0 I S M W H E R E N = 6 4 ( M + M ' ) + J . N O T E T H A T | M | < = 1 6 1 4 0 B Y D E S I G N .
| - - ADJFACT = 2 ^ ( M ' ) .
| - - REGISTERS S A V E D S O F A R A R E ( I N O R D E R ) F P C R , D 0 , F P 1 , a1 , A N D F P 2 .
fmuls #0x3C800000 ,% f p1 | . . . ( 1 / 6 4 ) * N
movel ( % a1 ) + ,F A C T 1 ( % a6 )
movel ( % a1 ) + ,F A C T 1 H I ( % a6 )
movel ( % a1 ) + ,F A C T 1 L O W ( % a6 )
movew ( % a1 ) + ,F A C T 2 ( % a6 )
clrw F A C T 2 + 2 ( % a6 )
fsubx % f p1 ,% f p0 | . . . X - ( 1 / 6 4 ) * I N T ( 6 4 X )
movew ( % a1 ) + ,F A C T 2 H I ( % a6 )
clrw F A C T 2 H I + 2 ( % a6 )
clrl F A C T 2 L O W ( % a6 )
addw % d0 ,F A C T 1 ( % a6 )
fmulx L O G 2 ,% f p0 | . . . F P 0 I S R
addw % d0 ,F A C T 2 ( % a6 )
bra e x p r
EXPBORS :
| - - FPCR, D 0 S A V E D
cmpil #0x3FFF8000 ,% d0
bgts E X P B I G
EXPSM :
| - - | X| I S S M A L L , R E T U R N 1 + X
fmovel % d1 ,% F P C R | r e s t o r e u s e r s e x c e p t i o n s
fadds #0x3F800000 ,% f p0 | . . . R E T U R N 1 + X
bra t _ f r c i n x
EXPBIG :
| - - | X| I S L A R G E , G E N E R A T E O V E R F L O W I F X > 0 ; ELSE GENERATE UNDERFLOW
| - - REGISTERS S A V E S O F A R A R E F P C R A N D D 0
movel X ( % a6 ) ,% d0
cmpil #0 ,% d0
blts E X P N E G
bclrb #7 ,( % a0 ) | t _ o v f l e x p e c t s p o s i t i v e v a l u e
bra t _ o v f l
EXPNEG :
bclrb #7 ,( % a0 ) | t _ u n f l e x p e c t s p o s i t i v e v a l u e
bra t _ u n f l
.global stentoxd
stentoxd :
| - - ENTRY P O I N T F O R 1 0 * * ( X ) F O R D E N O R M A L I Z E D A R G U M E N T
fmovel % d1 ,% f p c r | . . . s e t u s e r ' s r o u n d i n g m o d e / p r e c i s i o n
fmoves #0x3F800000 ,% f p0 | . . . R E T U R N 1 + X
movel ( % a0 ) ,% d0
orl #0x00800001 ,% d0
fadds % d0 ,% f p0
bra t _ f r c i n x
.global stentox
stentox :
| - - ENTRY P O I N T F O R 1 0 * * ( X ) , H E R E X I S F I N I T E , N O N - Z E R O , A N D N O T N A N ' S
fmovemx ( % a0 ) ,% f p0 - % f p0 | . . . L O A D I N P U T , d o n o t s e t c c ' s
movel ( % a0 ) ,% d0
movew 4 ( % a0 ) ,% d0
fmovex % f p0 ,X ( % a6 )
andil #0x7FFFFFFF ,% d0
cmpil #0x3FB98000 ,% d0 | . . . | X | > = 2 * * ( - 7 0 ) ?
bges T E N O K 1
bra E X P B O R S
TENOK1 :
cmpil #0x400B9B07 ,% d0 | . . . | X | < = 1 6 4 8 0 * l o g 2 / l o g 1 0 ?
bles T E N M A I N
bra E X P B O R S
TENMAIN :
| - - USUAL C A S E , 2 ^ ( - 7 0 ) < = | X | < = 1 6 4 8 0 L O G 2 / L O G 1 0
fmovex % f p0 ,% f p1
fmuld L 2 T E N 6 4 ,% f p1 | . . . X * 6 4 * L O G 1 0 / L O G 2
fmovel % f p1 ,N ( % a6 ) | . . . N =INT ( X * 6 4 * L O G 1 0 / L O G 2 )
movel % d2 ,- ( % s p )
lea E X P T B L ,% a1 | . . . L O A D A D D R E S S O F T A B L E O F 2 ^ ( J / 6 4 )
fmovel N ( % a6 ) ,% f p1 | . . . N - - > F L O A T I N G F M T
movel N ( % a6 ) ,% d0
movel % d0 ,% d2
andil #0x3F ,% d0 | . . . D 0 I S J
asll #4 ,% d0 | . . . D I S P L A C E M E N T F O R 2 ^ ( J / 6 4 )
addal % d0 ,% a1 | . . . A D D R E S S F O R 2 ^ ( J / 6 4 )
asrl #6 ,% d2 | . . . d2 I S L , N = 6 4 L + J
movel % d2 ,% d0
asrl #1 ,% d0 | . . . D 0 I S M
subl % d0 ,% d2 | . . . d2 I S M ' , N = 6 4 ( M + M ' ) + J
addil #0x3FFF ,% d2
movew % d2 ,A D J F A C T ( % a6 ) | . . . A D J F A C T I S 2 ^ ( M ' )
movel ( % s p ) + ,% d2
| - - SUMMARY : a1 I S A D D R E S S F O R T H E L E A D I N G P O R T I O N O F 2 ^ ( J / 6 4 ) ,
| - - D0 I S M W H E R E N = 6 4 ( M + M ' ) + J . N O T E T H A T | M | < = 1 6 1 4 0 B Y D E S I G N .
| - - ADJFACT = 2 ^ ( M ' ) .
| - - REGISTERS S A V E D S O F A R A R E ( I N O R D E R ) F P C R , D 0 , F P 1 , a1 , A N D F P 2 .
fmovex % f p1 ,% f p2
fmuld L 1 0 T W O 1 ,% f p1 | . . . N * ( L O G 2 / 6 4 L O G 1 0 ) _ L E A D
movel ( % a1 ) + ,F A C T 1 ( % a6 )
fmulx L 1 0 T W O 2 ,% f p2 | . . . N * ( L O G 2 / 6 4 L O G 1 0 ) _ T R A I L
movel ( % a1 ) + ,F A C T 1 H I ( % a6 )
movel ( % a1 ) + ,F A C T 1 L O W ( % a6 )
fsubx % f p1 ,% f p0 | . . . X - N L _ L E A D
movew ( % a1 ) + ,F A C T 2 ( % a6 )
fsubx % f p2 ,% f p0 | . . . X - N L _ T R A I L
clrw F A C T 2 + 2 ( % a6 )
movew ( % a1 ) + ,F A C T 2 H I ( % a6 )
clrw F A C T 2 H I + 2 ( % a6 )
clrl F A C T 2 L O W ( % a6 )
fmulx L O G 1 0 ,% f p0 | . . . F P 0 I S R
addw % d0 ,F A C T 1 ( % a6 )
addw % d0 ,F A C T 2 ( % a6 )
expr :
| - - FPCR, F P 2 , F P 3 A R E S A V E D I N O R D E R A S S H O W N .
| - - ADJFACT C O N T A I N S 2 * * ( M ' ) , F A C T 1 + F A C T 2 = 2 * * ( M ) * 2 * * ( J / 6 4 ) .
| - - FP0 I S R . T H E F O L L O W I N G C O D E C O M P U T E S
| - - 2 * * ( M' + M ) * 2 * * ( J / 6 4 ) * E X P ( R )
fmovex % f p0 ,% f p1
fmulx % f p1 ,% f p1 | . . . F P 1 I S S = R * R
fmoved E X P A 5 ,% f p2 | . . . F P 2 I S A 5
fmoved E X P A 4 ,% f p3 | . . . F P 3 I S A 4
fmulx % f p1 ,% f p2 | . . . F P 2 I S S * A 5
fmulx % f p1 ,% f p3 | . . . F P 3 I S S * A 4
faddd E X P A 3 ,% f p2 | . . . F P 2 I S A 3 + S * A 5
faddd E X P A 2 ,% f p3 | . . . F P 3 I S A 2 + S * A 4
fmulx % f p1 ,% f p2 | . . . F P 2 I S S * ( A 3 + S * A 5 )
fmulx % f p1 ,% f p3 | . . . F P 3 I S S * ( A 2 + S * A 4 )
faddd E X P A 1 ,% f p2 | . . . F P 2 I S A 1 + S * ( A 3 + S * A 5 )
fmulx % f p0 ,% f p3 | . . . F P 3 I S R * S * ( A 2 + S * A 4 )
fmulx % f p1 ,% f p2 | . . . F P 2 I S S * ( A 1 + S * ( A 3 + S * A 5 ) )
faddx % f p3 ,% f p0 | . . . F P 0 I S R + R * S * ( A 2 + S * A 4 )
faddx % f p2 ,% f p0 | . . . F P 0 I S E X P ( R ) - 1
| - - FINAL R E C O N S T R U C T I O N P R O C E S S
| - - EXP( X ) = 2 ^ M * 2 ^ ( J / 6 4 ) + 2 ^ M * 2 ^ ( J / 6 4 ) * ( E X P ( R ) - 1 ) - ( 1 O R 0 )
fmulx F A C T 1 ( % a6 ) ,% f p0
faddx F A C T 2 ( % a6 ) ,% f p0
faddx F A C T 1 ( % a6 ) ,% f p0
fmovel % d1 ,% F P C R | r e s t o r e u s e r s e x c e p t i o n s
clrw A D J F A C T + 2 ( % a6 )
movel #0x80000000 ,A D J F A C T + 4 ( % a6 )
clrl A D J F A C T + 8 ( % a6 )
fmulx A D J F A C T ( % a6 ) ,% f p0 | . . . F I N A L A D J U S T M E N T
bra t _ f r c i n x
| end