~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/arch/m68k/fpsp040/stwotox.S

Version: ~ [ linux-6.12-rc7 ] ~ [ linux-6.11.7 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.60 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.116 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.171 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.229 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.285 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.323 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.12 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /arch/m68k/fpsp040/stwotox.S (Architecture i386) and /arch/m68k/fpsp040/stwotox.S (Architecture m68k)


  1 |                                                   1 |
  2 |       stwotox.sa 3.1 12/10/90                     2 |       stwotox.sa 3.1 12/10/90
  3 |                                                   3 |
  4 |       stwotox  --- 2**X                           4 |       stwotox  --- 2**X
  5 |       stwotoxd --- 2**X for denormalized X        5 |       stwotoxd --- 2**X for denormalized X
  6 |       stentox  --- 10**X                          6 |       stentox  --- 10**X
  7 |       stentoxd --- 10**X for denormalized X       7 |       stentoxd --- 10**X for denormalized X
  8 |                                                   8 |
  9 |       Input: Double-extended number X in loc      9 |       Input: Double-extended number X in location pointed to
 10 |               by address register a0.            10 |               by address register a0.
 11 |                                                  11 |
 12 |       Output: The function values are return     12 |       Output: The function values are returned in Fp0.
 13 |                                                  13 |
 14 |       Accuracy and Monotonicity: The returne     14 |       Accuracy and Monotonicity: The returned result is within 2 ulps in
 15 |               64 significant bit, i.e. withi     15 |               64 significant bit, i.e. within 0.5001 ulp to 53 bits if the
 16 |               result is subsequently rounded     16 |               result is subsequently rounded to double precision. The
 17 |               result is provably monotonic i     17 |               result is provably monotonic in double precision.
 18 |                                                  18 |
 19 |       Speed: The program stwotox takes appro     19 |       Speed: The program stwotox takes approximately 190 cycles and the
 20 |               program stentox takes approxim     20 |               program stentox takes approximately 200 cycles.
 21 |                                                  21 |
 22 |       Algorithm:                                 22 |       Algorithm:
 23 |                                                  23 |
 24 |       twotox                                     24 |       twotox
 25 |       1. If |X| > 16480, go to ExpBig.           25 |       1. If |X| > 16480, go to ExpBig.
 26 |                                                  26 |
 27 |       2. If |X| < 2**(-70), go to ExpSm.         27 |       2. If |X| < 2**(-70), go to ExpSm.
 28 |                                                  28 |
 29 |       3. Decompose X as X = N/64 + r where |     29 |       3. Decompose X as X = N/64 + r where |r| <= 1/128. Furthermore
 30 |               decompose N as                     30 |               decompose N as
 31 |                N = 64(M + M') + j,  j = 0,1,     31 |                N = 64(M + M') + j,  j = 0,1,2,...,63.
 32 |                                                  32 |
 33 |       4. Overwrite r := r * log2. Then           33 |       4. Overwrite r := r * log2. Then
 34 |               2**X = 2**(M') * 2**(M) * 2**(     34 |               2**X = 2**(M') * 2**(M) * 2**(j/64) * exp(r).
 35 |               Go to expr to compute that exp     35 |               Go to expr to compute that expression.
 36 |                                                  36 |
 37 |       tentox                                     37 |       tentox
 38 |       1. If |X| > 16480*log_10(2) (base 10 l     38 |       1. If |X| > 16480*log_10(2) (base 10 log of 2), go to ExpBig.
 39 |                                                  39 |
 40 |       2. If |X| < 2**(-70), go to ExpSm.         40 |       2. If |X| < 2**(-70), go to ExpSm.
 41 |                                                  41 |
 42 |       3. Set y := X*log_2(10)*64 (base 2 log     42 |       3. Set y := X*log_2(10)*64 (base 2 log of 10). Set
 43 |               N := round-to-int(y). Decompos     43 |               N := round-to-int(y). Decompose N as
 44 |                N = 64(M + M') + j,  j = 0,1,     44 |                N = 64(M + M') + j,  j = 0,1,2,...,63.
 45 |                                                  45 |
 46 |       4. Define r as                             46 |       4. Define r as
 47 |               r := ((X - N*L1)-N*L2) * L10       47 |               r := ((X - N*L1)-N*L2) * L10
 48 |               where L1, L2 are the leading a     48 |               where L1, L2 are the leading and trailing parts of log_10(2)/64
 49 |               and L10 is the natural log of      49 |               and L10 is the natural log of 10. Then
 50 |               10**X = 2**(M') * 2**(M) * 2**     50 |               10**X = 2**(M') * 2**(M) * 2**(j/64) * exp(r).
 51 |               Go to expr to compute that exp     51 |               Go to expr to compute that expression.
 52 |                                                  52 |
 53 |       expr                                       53 |       expr
 54 |       1. Fetch 2**(j/64) from table as Fact1     54 |       1. Fetch 2**(j/64) from table as Fact1 and Fact2.
 55 |                                                  55 |
 56 |       2. Overwrite Fact1 and Fact2 by            56 |       2. Overwrite Fact1 and Fact2 by
 57 |               Fact1 := 2**(M) * Fact1            57 |               Fact1 := 2**(M) * Fact1
 58 |               Fact2 := 2**(M) * Fact2            58 |               Fact2 := 2**(M) * Fact2
 59 |               Thus Fact1 + Fact2 = 2**(M) *      59 |               Thus Fact1 + Fact2 = 2**(M) * 2**(j/64).
 60 |                                                  60 |
 61 |       3. Calculate P where 1 + P approximate     61 |       3. Calculate P where 1 + P approximates exp(r):
 62 |               P = r + r*r*(A1+r*(A2+...+r*A5     62 |               P = r + r*r*(A1+r*(A2+...+r*A5)).
 63 |                                                  63 |
 64 |       4. Let AdjFact := 2**(M'). Return          64 |       4. Let AdjFact := 2**(M'). Return
 65 |               AdjFact * ( Fact1 + ((Fact1*P)     65 |               AdjFact * ( Fact1 + ((Fact1*P) + Fact2) ).
 66 |               Exit.                              66 |               Exit.
 67 |                                                  67 |
 68 |       ExpBig                                     68 |       ExpBig
 69 |       1. Generate overflow by Huge * Huge if     69 |       1. Generate overflow by Huge * Huge if X > 0; otherwise, generate
 70 |               underflow by Tiny * Tiny.          70 |               underflow by Tiny * Tiny.
 71 |                                                  71 |
 72 |       ExpSm                                      72 |       ExpSm
 73 |       1. Return 1 + X.                           73 |       1. Return 1 + X.
 74 |                                                  74 |
 75                                                    75 
 76 |               Copyright (C) Motorola, Inc. 1     76 |               Copyright (C) Motorola, Inc. 1990
 77 |                       All Rights Reserved        77 |                       All Rights Reserved
 78 |                                                  78 |
 79 |       For details on the license for this fi     79 |       For details on the license for this file, please see the
 80 |       file, README, in this same directory.      80 |       file, README, in this same directory.
 81                                                    81 
 82 |STWOTOX        idnt    2,1 | Motorola 040 Flo     82 |STWOTOX        idnt    2,1 | Motorola 040 Floating Point Software Package
 83                                                    83 
 84         |section        8                          84         |section        8
 85                                                    85 
 86 #include "fpsp.h"                                  86 #include "fpsp.h"
 87                                                    87 
 88 BOUNDS1:        .long 0x3FB98000,0x400D80C0 |      88 BOUNDS1:        .long 0x3FB98000,0x400D80C0 | ... 2^(-70),16480
 89 BOUNDS2:        .long 0x3FB98000,0x400B9B07 |      89 BOUNDS2:        .long 0x3FB98000,0x400B9B07 | ... 2^(-70),16480 LOG2/LOG10
 90                                                    90 
 91 L2TEN64:        .long 0x406A934F,0x0979A371 |      91 L2TEN64:        .long 0x406A934F,0x0979A371 | ... 64LOG10/LOG2
 92 L10TWO1:        .long 0x3F734413,0x509F8000 |      92 L10TWO1:        .long 0x3F734413,0x509F8000 | ... LOG2/64LOG10
 93                                                    93 
 94 L10TWO2:        .long 0xBFCD0000,0xC0219DC1,0x     94 L10TWO2:        .long 0xBFCD0000,0xC0219DC1,0xDA994FD2,0x00000000
 95                                                    95 
 96 LOG10:  .long 0x40000000,0x935D8DDD,0xAAA8AC17     96 LOG10:  .long 0x40000000,0x935D8DDD,0xAAA8AC17,0x00000000
 97                                                    97 
 98 LOG2:   .long 0x3FFE0000,0xB17217F7,0xD1CF79AC     98 LOG2:   .long 0x3FFE0000,0xB17217F7,0xD1CF79AC,0x00000000
 99                                                    99 
100 EXPA5:  .long 0x3F56C16D,0x6F7BD0B2               100 EXPA5:  .long 0x3F56C16D,0x6F7BD0B2
101 EXPA4:  .long 0x3F811112,0x302C712C               101 EXPA4:  .long 0x3F811112,0x302C712C
102 EXPA3:  .long 0x3FA55555,0x55554CC1               102 EXPA3:  .long 0x3FA55555,0x55554CC1
103 EXPA2:  .long 0x3FC55555,0x55554A54               103 EXPA2:  .long 0x3FC55555,0x55554A54
104 EXPA1:  .long 0x3FE00000,0x00000000,0x00000000    104 EXPA1:  .long 0x3FE00000,0x00000000,0x00000000,0x00000000
105                                                   105 
106 HUGE:   .long 0x7FFE0000,0xFFFFFFFF,0xFFFFFFFF    106 HUGE:   .long 0x7FFE0000,0xFFFFFFFF,0xFFFFFFFF,0x00000000
107 TINY:   .long 0x00010000,0xFFFFFFFF,0xFFFFFFFF    107 TINY:   .long 0x00010000,0xFFFFFFFF,0xFFFFFFFF,0x00000000
108                                                   108 
109 EXPTBL:                                           109 EXPTBL:
110         .long  0x3FFF0000,0x80000000,0x0000000    110         .long  0x3FFF0000,0x80000000,0x00000000,0x3F738000
111         .long  0x3FFF0000,0x8164D1F3,0xBC03077    111         .long  0x3FFF0000,0x8164D1F3,0xBC030773,0x3FBEF7CA
112         .long  0x3FFF0000,0x82CD8698,0xAC2BA1D    112         .long  0x3FFF0000,0x82CD8698,0xAC2BA1D7,0x3FBDF8A9
113         .long  0x3FFF0000,0x843A28C3,0xACDE404    113         .long  0x3FFF0000,0x843A28C3,0xACDE4046,0x3FBCD7C9
114         .long  0x3FFF0000,0x85AAC367,0xCC487B1    114         .long  0x3FFF0000,0x85AAC367,0xCC487B15,0xBFBDE8DA
115         .long  0x3FFF0000,0x871F6196,0x9E8D101    115         .long  0x3FFF0000,0x871F6196,0x9E8D1010,0x3FBDE85C
116         .long  0x3FFF0000,0x88980E80,0x92DA852    116         .long  0x3FFF0000,0x88980E80,0x92DA8527,0x3FBEBBF1
117         .long  0x3FFF0000,0x8A14D575,0x496EFD9    117         .long  0x3FFF0000,0x8A14D575,0x496EFD9A,0x3FBB80CA
118         .long  0x3FFF0000,0x8B95C1E3,0xEA8BD6E    118         .long  0x3FFF0000,0x8B95C1E3,0xEA8BD6E7,0xBFBA8373
119         .long  0x3FFF0000,0x8D1ADF5B,0x7E5BA9E    119         .long  0x3FFF0000,0x8D1ADF5B,0x7E5BA9E6,0xBFBE9670
120         .long  0x3FFF0000,0x8EA4398B,0x45CD53C    120         .long  0x3FFF0000,0x8EA4398B,0x45CD53C0,0x3FBDB700
121         .long  0x3FFF0000,0x9031DC43,0x1466B1D    121         .long  0x3FFF0000,0x9031DC43,0x1466B1DC,0x3FBEEEB0
122         .long  0x3FFF0000,0x91C3D373,0xAB11C33    122         .long  0x3FFF0000,0x91C3D373,0xAB11C336,0x3FBBFD6D
123         .long  0x3FFF0000,0x935A2B2F,0x13E6E92    123         .long  0x3FFF0000,0x935A2B2F,0x13E6E92C,0xBFBDB319
124         .long  0x3FFF0000,0x94F4EFA8,0xFEF7096    124         .long  0x3FFF0000,0x94F4EFA8,0xFEF70961,0x3FBDBA2B
125         .long  0x3FFF0000,0x96942D37,0x20185A0    125         .long  0x3FFF0000,0x96942D37,0x20185A00,0x3FBE91D5
126         .long  0x3FFF0000,0x9837F051,0x8DB8A96    126         .long  0x3FFF0000,0x9837F051,0x8DB8A96F,0x3FBE8D5A
127         .long  0x3FFF0000,0x99E04593,0x20B7FA6    127         .long  0x3FFF0000,0x99E04593,0x20B7FA65,0xBFBCDE7B
128         .long  0x3FFF0000,0x9B8D39B9,0xD54E553    128         .long  0x3FFF0000,0x9B8D39B9,0xD54E5539,0xBFBEBAAF
129         .long  0x3FFF0000,0x9D3ED9A7,0x2CFFB75    129         .long  0x3FFF0000,0x9D3ED9A7,0x2CFFB751,0xBFBD86DA
130         .long  0x3FFF0000,0x9EF53260,0x91A111A    130         .long  0x3FFF0000,0x9EF53260,0x91A111AE,0xBFBEBEDD
131         .long  0x3FFF0000,0xA0B0510F,0xB9714FC    131         .long  0x3FFF0000,0xA0B0510F,0xB9714FC2,0x3FBCC96E
132         .long  0x3FFF0000,0xA2704303,0x0C49681    132         .long  0x3FFF0000,0xA2704303,0x0C496819,0xBFBEC90B
133         .long  0x3FFF0000,0xA43515AE,0x09E6809    133         .long  0x3FFF0000,0xA43515AE,0x09E6809E,0x3FBBD1DB
134         .long  0x3FFF0000,0xA5FED6A9,0xB15138E    134         .long  0x3FFF0000,0xA5FED6A9,0xB15138EA,0x3FBCE5EB
135         .long  0x3FFF0000,0xA7CD93B4,0xE965356    135         .long  0x3FFF0000,0xA7CD93B4,0xE965356A,0xBFBEC274
136         .long  0x3FFF0000,0xA9A15AB4,0xEA7C0EF    136         .long  0x3FFF0000,0xA9A15AB4,0xEA7C0EF8,0x3FBEA83C
137         .long  0x3FFF0000,0xAB7A39B5,0xA93ED33    137         .long  0x3FFF0000,0xAB7A39B5,0xA93ED337,0x3FBECB00
138         .long  0x3FFF0000,0xAD583EEA,0x42A14AC    138         .long  0x3FFF0000,0xAD583EEA,0x42A14AC6,0x3FBE9301
139         .long  0x3FFF0000,0xAF3B78AD,0x690A437    139         .long  0x3FFF0000,0xAF3B78AD,0x690A4375,0xBFBD8367
140         .long  0x3FFF0000,0xB123F581,0xD2AC259    140         .long  0x3FFF0000,0xB123F581,0xD2AC2590,0xBFBEF05F
141         .long  0x3FFF0000,0xB311C412,0xA911248    141         .long  0x3FFF0000,0xB311C412,0xA9112489,0x3FBDFB3C
142         .long  0x3FFF0000,0xB504F333,0xF9DE648    142         .long  0x3FFF0000,0xB504F333,0xF9DE6484,0x3FBEB2FB
143         .long  0x3FFF0000,0xB6FD91E3,0x28D1779    143         .long  0x3FFF0000,0xB6FD91E3,0x28D17791,0x3FBAE2CB
144         .long  0x3FFF0000,0xB8FBAF47,0x62FB9EE    144         .long  0x3FFF0000,0xB8FBAF47,0x62FB9EE9,0x3FBCDC3C
145         .long  0x3FFF0000,0xBAFF5AB2,0x133E45F    145         .long  0x3FFF0000,0xBAFF5AB2,0x133E45FB,0x3FBEE9AA
146         .long  0x3FFF0000,0xBD08A39F,0x580C36B    146         .long  0x3FFF0000,0xBD08A39F,0x580C36BF,0xBFBEAEFD
147         .long  0x3FFF0000,0xBF1799B6,0x7A73108    147         .long  0x3FFF0000,0xBF1799B6,0x7A731083,0xBFBCBF51
148         .long  0x3FFF0000,0xC12C4CCA,0x6670945    148         .long  0x3FFF0000,0xC12C4CCA,0x66709456,0x3FBEF88A
149         .long  0x3FFF0000,0xC346CCDA,0x2497640    149         .long  0x3FFF0000,0xC346CCDA,0x24976407,0x3FBD83B2
150         .long  0x3FFF0000,0xC5672A11,0x5506DAD    150         .long  0x3FFF0000,0xC5672A11,0x5506DADD,0x3FBDF8AB
151         .long  0x3FFF0000,0xC78D74C8,0xABB9B15    151         .long  0x3FFF0000,0xC78D74C8,0xABB9B15D,0xBFBDFB17
152         .long  0x3FFF0000,0xC9B9BD86,0x6E2F27A    152         .long  0x3FFF0000,0xC9B9BD86,0x6E2F27A3,0xBFBEFE3C
153         .long  0x3FFF0000,0xCBEC14FE,0xF2727C5    153         .long  0x3FFF0000,0xCBEC14FE,0xF2727C5D,0xBFBBB6F8
154         .long  0x3FFF0000,0xCE248C15,0x1F8480E    154         .long  0x3FFF0000,0xCE248C15,0x1F8480E4,0xBFBCEE53
155         .long  0x3FFF0000,0xD06333DA,0xEF2B259    155         .long  0x3FFF0000,0xD06333DA,0xEF2B2595,0xBFBDA4AE
156         .long  0x3FFF0000,0xD2A81D91,0xF12AE45    156         .long  0x3FFF0000,0xD2A81D91,0xF12AE45A,0x3FBC9124
157         .long  0x3FFF0000,0xD4F35AAB,0xCFEDFA1    157         .long  0x3FFF0000,0xD4F35AAB,0xCFEDFA1F,0x3FBEB243
158         .long  0x3FFF0000,0xD744FCCA,0xD69D6AF    158         .long  0x3FFF0000,0xD744FCCA,0xD69D6AF4,0x3FBDE69A
159         .long  0x3FFF0000,0xD99D15C2,0x78AFD7B    159         .long  0x3FFF0000,0xD99D15C2,0x78AFD7B6,0xBFB8BC61
160         .long  0x3FFF0000,0xDBFBB797,0xDAF2375    160         .long  0x3FFF0000,0xDBFBB797,0xDAF23755,0x3FBDF610
161         .long  0x3FFF0000,0xDE60F482,0x5E0E912    161         .long  0x3FFF0000,0xDE60F482,0x5E0E9124,0xBFBD8BE1
162         .long  0x3FFF0000,0xE0CCDEEC,0x2A94E11    162         .long  0x3FFF0000,0xE0CCDEEC,0x2A94E111,0x3FBACB12
163         .long  0x3FFF0000,0xE33F8972,0xBE8A5A5    163         .long  0x3FFF0000,0xE33F8972,0xBE8A5A51,0x3FBB9BFE
164         .long  0x3FFF0000,0xE5B906E7,0x7C8348A    164         .long  0x3FFF0000,0xE5B906E7,0x7C8348A8,0x3FBCF2F4
165         .long  0x3FFF0000,0xE8396A50,0x3C4BDC6    165         .long  0x3FFF0000,0xE8396A50,0x3C4BDC68,0x3FBEF22F
166         .long  0x3FFF0000,0xEAC0C6E7,0xDD24392    166         .long  0x3FFF0000,0xEAC0C6E7,0xDD24392F,0xBFBDBF4A
167         .long  0x3FFF0000,0xED4F301E,0xD9942B8    167         .long  0x3FFF0000,0xED4F301E,0xD9942B84,0x3FBEC01A
168         .long  0x3FFF0000,0xEFE4B99B,0xDCDAF5C    168         .long  0x3FFF0000,0xEFE4B99B,0xDCDAF5CB,0x3FBE8CAC
169         .long  0x3FFF0000,0xF281773C,0x59FFB13    169         .long  0x3FFF0000,0xF281773C,0x59FFB13A,0xBFBCBB3F
170         .long  0x3FFF0000,0xF5257D15,0x2486CC2    170         .long  0x3FFF0000,0xF5257D15,0x2486CC2C,0x3FBEF73A
171         .long  0x3FFF0000,0xF7D0DF73,0x0AD13BB    171         .long  0x3FFF0000,0xF7D0DF73,0x0AD13BB9,0xBFB8B795
172         .long  0x3FFF0000,0xFA83B2DB,0x722A033    172         .long  0x3FFF0000,0xFA83B2DB,0x722A033A,0x3FBEF84B
173         .long  0x3FFF0000,0xFD3E0C0C,0xF486C17    173         .long  0x3FFF0000,0xFD3E0C0C,0xF486C175,0xBFBEF581
174                                                   174 
175         .set    N,L_SCR1                          175         .set    N,L_SCR1
176                                                   176 
177         .set    X,FP_SCR1                         177         .set    X,FP_SCR1
178         .set    XDCARE,X+2                        178         .set    XDCARE,X+2
179         .set    XFRAC,X+4                         179         .set    XFRAC,X+4
180                                                   180 
181         .set    ADJFACT,FP_SCR2                   181         .set    ADJFACT,FP_SCR2
182                                                   182 
183         .set    FACT1,FP_SCR3                     183         .set    FACT1,FP_SCR3
184         .set    FACT1HI,FACT1+4                   184         .set    FACT1HI,FACT1+4
185         .set    FACT1LOW,FACT1+8                  185         .set    FACT1LOW,FACT1+8
186                                                   186 
187         .set    FACT2,FP_SCR4                     187         .set    FACT2,FP_SCR4
188         .set    FACT2HI,FACT2+4                   188         .set    FACT2HI,FACT2+4
189         .set    FACT2LOW,FACT2+8                  189         .set    FACT2LOW,FACT2+8
190                                                   190 
191         | xref  t_unfl                            191         | xref  t_unfl
192         |xref   t_ovfl                            192         |xref   t_ovfl
193         |xref   t_frcinx                          193         |xref   t_frcinx
194                                                   194 
195         .global stwotoxd                          195         .global stwotoxd
196 stwotoxd:                                         196 stwotoxd:
197 |--ENTRY POINT FOR 2**(X) FOR DENORMALIZED ARG    197 |--ENTRY POINT FOR 2**(X) FOR DENORMALIZED ARGUMENT
198                                                   198 
199         fmovel          %d1,%fpcr                 199         fmovel          %d1,%fpcr               | ...set user's rounding mode/precision
200         fmoves          #0x3F800000,%fp0  | ..    200         fmoves          #0x3F800000,%fp0  | ...RETURN 1 + X
201         movel           (%a0),%d0                 201         movel           (%a0),%d0
202         orl             #0x00800001,%d0           202         orl             #0x00800001,%d0
203         fadds           %d0,%fp0                  203         fadds           %d0,%fp0
204         bra             t_frcinx                  204         bra             t_frcinx
205                                                   205 
206         .global stwotox                           206         .global stwotox
207 stwotox:                                          207 stwotox:
208 |--ENTRY POINT FOR 2**(X), HERE X IS FINITE, N    208 |--ENTRY POINT FOR 2**(X), HERE X IS FINITE, NON-ZERO, AND NOT NAN'S
209         fmovemx (%a0),%fp0-%fp0 | ...LOAD INPU    209         fmovemx (%a0),%fp0-%fp0 | ...LOAD INPUT, do not set cc's
210                                                   210 
211         movel           (%a0),%d0                 211         movel           (%a0),%d0
212         movew           4(%a0),%d0                212         movew           4(%a0),%d0
213         fmovex          %fp0,X(%a6)               213         fmovex          %fp0,X(%a6)
214         andil           #0x7FFFFFFF,%d0           214         andil           #0x7FFFFFFF,%d0
215                                                   215 
216         cmpil           #0x3FB98000,%d0           216         cmpil           #0x3FB98000,%d0         | ...|X| >= 2**(-70)?
217         bges            TWOOK1                    217         bges            TWOOK1
218         bra             EXPBORS                   218         bra             EXPBORS
219                                                   219 
220 TWOOK1:                                           220 TWOOK1:
221         cmpil           #0x400D80C0,%d0           221         cmpil           #0x400D80C0,%d0         | ...|X| > 16480?
222         bles            TWOMAIN                   222         bles            TWOMAIN
223         bra             EXPBORS                   223         bra             EXPBORS
224                                                   224 
225                                                   225 
226 TWOMAIN:                                          226 TWOMAIN:
227 |--USUAL CASE, 2^(-70) <= |X| <= 16480            227 |--USUAL CASE, 2^(-70) <= |X| <= 16480
228                                                   228 
229         fmovex          %fp0,%fp1                 229         fmovex          %fp0,%fp1
230         fmuls           #0x42800000,%fp1  | ..    230         fmuls           #0x42800000,%fp1  | ...64 * X
231                                                   231 
232         fmovel          %fp1,N(%a6)               232         fmovel          %fp1,N(%a6)             | ...N = ROUND-TO-INT(64 X)
233         movel           %d2,-(%sp)                233         movel           %d2,-(%sp)
234         lea             EXPTBL,%a1      | ...L    234         lea             EXPTBL,%a1      | ...LOAD ADDRESS OF TABLE OF 2^(J/64)
235         fmovel          N(%a6),%fp1               235         fmovel          N(%a6),%fp1             | ...N --> FLOATING FMT
236         movel           N(%a6),%d0                236         movel           N(%a6),%d0
237         movel           %d0,%d2                   237         movel           %d0,%d2
238         andil           #0x3F,%d0                 238         andil           #0x3F,%d0               | ...D0 IS J
239         asll            #4,%d0          | ...D    239         asll            #4,%d0          | ...DISPLACEMENT FOR 2^(J/64)
240         addal           %d0,%a1         | ...A    240         addal           %d0,%a1         | ...ADDRESS FOR 2^(J/64)
241         asrl            #6,%d2          | ...d    241         asrl            #6,%d2          | ...d2 IS L, N = 64L + J
242         movel           %d2,%d0                   242         movel           %d2,%d0
243         asrl            #1,%d0          | ...D    243         asrl            #1,%d0          | ...D0 IS M
244         subl            %d0,%d2         | ...d    244         subl            %d0,%d2         | ...d2 IS M', N = 64(M+M') + J
245         addil           #0x3FFF,%d2               245         addil           #0x3FFF,%d2
246         movew           %d2,ADJFACT(%a6)          246         movew           %d2,ADJFACT(%a6)        | ...ADJFACT IS 2^(M')
247         movel           (%sp)+,%d2                247         movel           (%sp)+,%d2
248 |--SUMMARY: a1 IS ADDRESS FOR THE LEADING PORT    248 |--SUMMARY: a1 IS ADDRESS FOR THE LEADING PORTION OF 2^(J/64),
249 |--D0 IS M WHERE N = 64(M+M') + J. NOTE THAT |    249 |--D0 IS M WHERE N = 64(M+M') + J. NOTE THAT |M| <= 16140 BY DESIGN.
250 |--ADJFACT = 2^(M').                              250 |--ADJFACT = 2^(M').
251 |--REGISTERS SAVED SO FAR ARE (IN ORDER) FPCR,    251 |--REGISTERS SAVED SO FAR ARE (IN ORDER) FPCR, D0, FP1, a1, AND FP2.
252                                                   252 
253         fmuls           #0x3C800000,%fp1  | ..    253         fmuls           #0x3C800000,%fp1  | ...(1/64)*N
254         movel           (%a1)+,FACT1(%a6)         254         movel           (%a1)+,FACT1(%a6)
255         movel           (%a1)+,FACT1HI(%a6)       255         movel           (%a1)+,FACT1HI(%a6)
256         movel           (%a1)+,FACT1LOW(%a6)      256         movel           (%a1)+,FACT1LOW(%a6)
257         movew           (%a1)+,FACT2(%a6)         257         movew           (%a1)+,FACT2(%a6)
258         clrw            FACT2+2(%a6)              258         clrw            FACT2+2(%a6)
259                                                   259 
260         fsubx           %fp1,%fp0                 260         fsubx           %fp1,%fp0               | ...X - (1/64)*INT(64 X)
261                                                   261 
262         movew           (%a1)+,FACT2HI(%a6)       262         movew           (%a1)+,FACT2HI(%a6)
263         clrw            FACT2HI+2(%a6)            263         clrw            FACT2HI+2(%a6)
264         clrl            FACT2LOW(%a6)             264         clrl            FACT2LOW(%a6)
265         addw            %d0,FACT1(%a6)            265         addw            %d0,FACT1(%a6)
266                                                   266 
267         fmulx           LOG2,%fp0       | ...F    267         fmulx           LOG2,%fp0       | ...FP0 IS R
268         addw            %d0,FACT2(%a6)            268         addw            %d0,FACT2(%a6)
269                                                   269 
270         bra             expr                      270         bra             expr
271                                                   271 
272 EXPBORS:                                          272 EXPBORS:
273 |--FPCR, D0 SAVED                                 273 |--FPCR, D0 SAVED
274         cmpil           #0x3FFF8000,%d0           274         cmpil           #0x3FFF8000,%d0
275         bgts            EXPBIG                    275         bgts            EXPBIG
276                                                   276 
277 EXPSM:                                            277 EXPSM:
278 |--|X| IS SMALL, RETURN 1 + X                     278 |--|X| IS SMALL, RETURN 1 + X
279                                                   279 
280         fmovel          %d1,%FPCR                 280         fmovel          %d1,%FPCR               |restore users exceptions
281         fadds           #0x3F800000,%fp0  | ..    281         fadds           #0x3F800000,%fp0  | ...RETURN 1 + X
282                                                   282 
283         bra             t_frcinx                  283         bra             t_frcinx
284                                                   284 
285 EXPBIG:                                           285 EXPBIG:
286 |--|X| IS LARGE, GENERATE OVERFLOW IF X > 0; E    286 |--|X| IS LARGE, GENERATE OVERFLOW IF X > 0; ELSE GENERATE UNDERFLOW
287 |--REGISTERS SAVE SO FAR ARE FPCR AND  D0         287 |--REGISTERS SAVE SO FAR ARE FPCR AND  D0
288         movel           X(%a6),%d0                288         movel           X(%a6),%d0
289         cmpil           #0,%d0                    289         cmpil           #0,%d0
290         blts            EXPNEG                    290         blts            EXPNEG
291                                                   291 
292         bclrb           #7,(%a0)                  292         bclrb           #7,(%a0)                |t_ovfl expects positive value
293         bra             t_ovfl                    293         bra             t_ovfl
294                                                   294 
295 EXPNEG:                                           295 EXPNEG:
296         bclrb           #7,(%a0)                  296         bclrb           #7,(%a0)                |t_unfl expects positive value
297         bra             t_unfl                    297         bra             t_unfl
298                                                   298 
299         .global stentoxd                          299         .global stentoxd
300 stentoxd:                                         300 stentoxd:
301 |--ENTRY POINT FOR 10**(X) FOR DENORMALIZED AR    301 |--ENTRY POINT FOR 10**(X) FOR DENORMALIZED ARGUMENT
302                                                   302 
303         fmovel          %d1,%fpcr                 303         fmovel          %d1,%fpcr               | ...set user's rounding mode/precision
304         fmoves          #0x3F800000,%fp0  | ..    304         fmoves          #0x3F800000,%fp0  | ...RETURN 1 + X
305         movel           (%a0),%d0                 305         movel           (%a0),%d0
306         orl             #0x00800001,%d0           306         orl             #0x00800001,%d0
307         fadds           %d0,%fp0                  307         fadds           %d0,%fp0
308         bra             t_frcinx                  308         bra             t_frcinx
309                                                   309 
310         .global stentox                           310         .global stentox
311 stentox:                                          311 stentox:
312 |--ENTRY POINT FOR 10**(X), HERE X IS FINITE,     312 |--ENTRY POINT FOR 10**(X), HERE X IS FINITE, NON-ZERO, AND NOT NAN'S
313         fmovemx (%a0),%fp0-%fp0 | ...LOAD INPU    313         fmovemx (%a0),%fp0-%fp0 | ...LOAD INPUT, do not set cc's
314                                                   314 
315         movel           (%a0),%d0                 315         movel           (%a0),%d0
316         movew           4(%a0),%d0                316         movew           4(%a0),%d0
317         fmovex          %fp0,X(%a6)               317         fmovex          %fp0,X(%a6)
318         andil           #0x7FFFFFFF,%d0           318         andil           #0x7FFFFFFF,%d0
319                                                   319 
320         cmpil           #0x3FB98000,%d0           320         cmpil           #0x3FB98000,%d0         | ...|X| >= 2**(-70)?
321         bges            TENOK1                    321         bges            TENOK1
322         bra             EXPBORS                   322         bra             EXPBORS
323                                                   323 
324 TENOK1:                                           324 TENOK1:
325         cmpil           #0x400B9B07,%d0           325         cmpil           #0x400B9B07,%d0         | ...|X| <= 16480*log2/log10 ?
326         bles            TENMAIN                   326         bles            TENMAIN
327         bra             EXPBORS                   327         bra             EXPBORS
328                                                   328 
329 TENMAIN:                                          329 TENMAIN:
330 |--USUAL CASE, 2^(-70) <= |X| <= 16480 LOG 2 /    330 |--USUAL CASE, 2^(-70) <= |X| <= 16480 LOG 2 / LOG 10
331                                                   331 
332         fmovex          %fp0,%fp1                 332         fmovex          %fp0,%fp1
333         fmuld           L2TEN64,%fp1    | ...X    333         fmuld           L2TEN64,%fp1    | ...X*64*LOG10/LOG2
334                                                   334 
335         fmovel          %fp1,N(%a6)               335         fmovel          %fp1,N(%a6)             | ...N=INT(X*64*LOG10/LOG2)
336         movel           %d2,-(%sp)                336         movel           %d2,-(%sp)
337         lea             EXPTBL,%a1      | ...L    337         lea             EXPTBL,%a1      | ...LOAD ADDRESS OF TABLE OF 2^(J/64)
338         fmovel          N(%a6),%fp1               338         fmovel          N(%a6),%fp1             | ...N --> FLOATING FMT
339         movel           N(%a6),%d0                339         movel           N(%a6),%d0
340         movel           %d0,%d2                   340         movel           %d0,%d2
341         andil           #0x3F,%d0                 341         andil           #0x3F,%d0               | ...D0 IS J
342         asll            #4,%d0          | ...D    342         asll            #4,%d0          | ...DISPLACEMENT FOR 2^(J/64)
343         addal           %d0,%a1         | ...A    343         addal           %d0,%a1         | ...ADDRESS FOR 2^(J/64)
344         asrl            #6,%d2          | ...d    344         asrl            #6,%d2          | ...d2 IS L, N = 64L + J
345         movel           %d2,%d0                   345         movel           %d2,%d0
346         asrl            #1,%d0          | ...D    346         asrl            #1,%d0          | ...D0 IS M
347         subl            %d0,%d2         | ...d    347         subl            %d0,%d2         | ...d2 IS M', N = 64(M+M') + J
348         addil           #0x3FFF,%d2               348         addil           #0x3FFF,%d2
349         movew           %d2,ADJFACT(%a6)          349         movew           %d2,ADJFACT(%a6)        | ...ADJFACT IS 2^(M')
350         movel           (%sp)+,%d2                350         movel           (%sp)+,%d2
351                                                   351 
352 |--SUMMARY: a1 IS ADDRESS FOR THE LEADING PORT    352 |--SUMMARY: a1 IS ADDRESS FOR THE LEADING PORTION OF 2^(J/64),
353 |--D0 IS M WHERE N = 64(M+M') + J. NOTE THAT |    353 |--D0 IS M WHERE N = 64(M+M') + J. NOTE THAT |M| <= 16140 BY DESIGN.
354 |--ADJFACT = 2^(M').                              354 |--ADJFACT = 2^(M').
355 |--REGISTERS SAVED SO FAR ARE (IN ORDER) FPCR,    355 |--REGISTERS SAVED SO FAR ARE (IN ORDER) FPCR, D0, FP1, a1, AND FP2.
356                                                   356 
357         fmovex          %fp1,%fp2                 357         fmovex          %fp1,%fp2
358                                                   358 
359         fmuld           L10TWO1,%fp1    | ...N    359         fmuld           L10TWO1,%fp1    | ...N*(LOG2/64LOG10)_LEAD
360         movel           (%a1)+,FACT1(%a6)         360         movel           (%a1)+,FACT1(%a6)
361                                                   361 
362         fmulx           L10TWO2,%fp2    | ...N    362         fmulx           L10TWO2,%fp2    | ...N*(LOG2/64LOG10)_TRAIL
363                                                   363 
364         movel           (%a1)+,FACT1HI(%a6)       364         movel           (%a1)+,FACT1HI(%a6)
365         movel           (%a1)+,FACT1LOW(%a6)      365         movel           (%a1)+,FACT1LOW(%a6)
366         fsubx           %fp1,%fp0                 366         fsubx           %fp1,%fp0               | ...X - N L_LEAD
367         movew           (%a1)+,FACT2(%a6)         367         movew           (%a1)+,FACT2(%a6)
368                                                   368 
369         fsubx           %fp2,%fp0                 369         fsubx           %fp2,%fp0               | ...X - N L_TRAIL
370                                                   370 
371         clrw            FACT2+2(%a6)              371         clrw            FACT2+2(%a6)
372         movew           (%a1)+,FACT2HI(%a6)       372         movew           (%a1)+,FACT2HI(%a6)
373         clrw            FACT2HI+2(%a6)            373         clrw            FACT2HI+2(%a6)
374         clrl            FACT2LOW(%a6)             374         clrl            FACT2LOW(%a6)
375                                                   375 
376         fmulx           LOG10,%fp0      | ...F    376         fmulx           LOG10,%fp0      | ...FP0 IS R
377                                                   377 
378         addw            %d0,FACT1(%a6)            378         addw            %d0,FACT1(%a6)
379         addw            %d0,FACT2(%a6)            379         addw            %d0,FACT2(%a6)
380                                                   380 
381 expr:                                             381 expr:
382 |--FPCR, FP2, FP3 ARE SAVED IN ORDER AS SHOWN.    382 |--FPCR, FP2, FP3 ARE SAVED IN ORDER AS SHOWN.
383 |--ADJFACT CONTAINS 2**(M'), FACT1 + FACT2 = 2    383 |--ADJFACT CONTAINS 2**(M'), FACT1 + FACT2 = 2**(M) * 2**(J/64).
384 |--FP0 IS R. THE FOLLOWING CODE COMPUTES          384 |--FP0 IS R. THE FOLLOWING CODE COMPUTES
385 |--     2**(M'+M) * 2**(J/64) * EXP(R)            385 |--     2**(M'+M) * 2**(J/64) * EXP(R)
386                                                   386 
387         fmovex          %fp0,%fp1                 387         fmovex          %fp0,%fp1
388         fmulx           %fp1,%fp1                 388         fmulx           %fp1,%fp1               | ...FP1 IS S = R*R
389                                                   389 
390         fmoved          EXPA5,%fp2      | ...F    390         fmoved          EXPA5,%fp2      | ...FP2 IS A5
391         fmoved          EXPA4,%fp3      | ...F    391         fmoved          EXPA4,%fp3      | ...FP3 IS A4
392                                                   392 
393         fmulx           %fp1,%fp2                 393         fmulx           %fp1,%fp2               | ...FP2 IS S*A5
394         fmulx           %fp1,%fp3                 394         fmulx           %fp1,%fp3               | ...FP3 IS S*A4
395                                                   395 
396         faddd           EXPA3,%fp2      | ...F    396         faddd           EXPA3,%fp2      | ...FP2 IS A3+S*A5
397         faddd           EXPA2,%fp3      | ...F    397         faddd           EXPA2,%fp3      | ...FP3 IS A2+S*A4
398                                                   398 
399         fmulx           %fp1,%fp2                 399         fmulx           %fp1,%fp2               | ...FP2 IS S*(A3+S*A5)
400         fmulx           %fp1,%fp3                 400         fmulx           %fp1,%fp3               | ...FP3 IS S*(A2+S*A4)
401                                                   401 
402         faddd           EXPA1,%fp2      | ...F    402         faddd           EXPA1,%fp2      | ...FP2 IS A1+S*(A3+S*A5)
403         fmulx           %fp0,%fp3                 403         fmulx           %fp0,%fp3               | ...FP3 IS R*S*(A2+S*A4)
404                                                   404 
405         fmulx           %fp1,%fp2                 405         fmulx           %fp1,%fp2               | ...FP2 IS S*(A1+S*(A3+S*A5))
406         faddx           %fp3,%fp0                 406         faddx           %fp3,%fp0               | ...FP0 IS R+R*S*(A2+S*A4)
407                                                   407 
408         faddx           %fp2,%fp0                 408         faddx           %fp2,%fp0               | ...FP0 IS EXP(R) - 1
409                                                   409 
410                                                   410 
411 |--FINAL RECONSTRUCTION PROCESS                   411 |--FINAL RECONSTRUCTION PROCESS
412 |--EXP(X) = 2^M*2^(J/64) + 2^M*2^(J/64)*(EXP(R    412 |--EXP(X) = 2^M*2^(J/64) + 2^M*2^(J/64)*(EXP(R)-1)  -  (1 OR 0)
413                                                   413 
414         fmulx           FACT1(%a6),%fp0           414         fmulx           FACT1(%a6),%fp0
415         faddx           FACT2(%a6),%fp0           415         faddx           FACT2(%a6),%fp0
416         faddx           FACT1(%a6),%fp0           416         faddx           FACT1(%a6),%fp0
417                                                   417 
418         fmovel          %d1,%FPCR                 418         fmovel          %d1,%FPCR               |restore users exceptions
419         clrw            ADJFACT+2(%a6)            419         clrw            ADJFACT+2(%a6)
420         movel           #0x80000000,ADJFACT+4(    420         movel           #0x80000000,ADJFACT+4(%a6)
421         clrl            ADJFACT+8(%a6)            421         clrl            ADJFACT+8(%a6)
422         fmulx           ADJFACT(%a6),%fp0         422         fmulx           ADJFACT(%a6),%fp0       | ...FINAL ADJUSTMENT
423                                                   423 
424         bra             t_frcinx                  424         bra             t_frcinx
425                                                   425 
426         |end                                      426         |end
                                                      

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php