Commit | Line | Data |
---|---|---|
252b5132 | 1 | /* flonum_const.c - Useful Flonum constants |
2571583a | 2 | Copyright (C) 1987-2017 Free Software Foundation, Inc. |
252b5132 RH |
3 | |
4 | This file is part of GAS, the GNU Assembler. | |
5 | ||
6 | GAS is free software; you can redistribute it and/or modify | |
7 | it under the terms of the GNU General Public License as published by | |
ec2655a6 | 8 | the Free Software Foundation; either version 3, or (at your option) |
252b5132 RH |
9 | any later version. |
10 | ||
11 | GAS is distributed in the hope that it will be useful, | |
12 | but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
17 | along with GAS; see the file COPYING. If not, write to the Free | |
4b4da160 NC |
18 | Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA |
19 | 02110-1301, USA. */ | |
252b5132 | 20 | |
29589b0c | 21 | #include "ansidecl.h" |
252b5132 RH |
22 | #include "flonum.h" |
23 | /* JF: I added the last entry to this table, and I'm not | |
24 | sure if its right or not. Could go either way. I wish | |
f0e652b4 | 25 | I really understood this stuff. */ |
252b5132 | 26 | |
252b5132 RH |
27 | const int table_size_of_flonum_powers_of_ten = 13; |
28 | ||
e6c774b4 KH |
29 | static const LITTLENUM_TYPE zero[] = { |
30 | 1 | |
31 | }; | |
252b5132 RH |
32 | |
33 | /***********************************************************************\ | |
34 | * * | |
35 | * Warning: the low order bits may be WRONG here. * | |
36 | * I took this from a suspect bc(1) script. * | |
37 | * "minus_X"[] is supposed to be 10^(2^-X) expressed in base 2^16. * | |
38 | * The radix point is just AFTER the highest element of the [] * | |
39 | * * | |
40 | * Because bc rounds DOWN for printing (I think), the lowest * | |
41 | * significance littlenums should probably have 1 added to them. * | |
42 | * * | |
43 | \***********************************************************************/ | |
44 | ||
45 | /* JF: If this equals 6553/(2^16)+39321/(2^32)+... it approaches .1 */ | |
e6c774b4 | 46 | static const LITTLENUM_TYPE minus_1[] = { |
252b5132 | 47 | 39322, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, |
e6c774b4 KH |
48 | 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 6553 |
49 | }; | |
50 | ||
51 | static const LITTLENUM_TYPE plus_1[] = { | |
52 | 10 | |
53 | }; | |
252b5132 RH |
54 | |
55 | /* JF: If this equals 655/(2^16) + 23592/(2^32) + ... it approaches .01 */ | |
e6c774b4 | 56 | static const LITTLENUM_TYPE minus_2[] = { |
252b5132 | 57 | 10486, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 49807, |
e6c774b4 KH |
58 | 10485, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 655 |
59 | }; | |
60 | ||
61 | static const LITTLENUM_TYPE plus_2[] = { | |
62 | 100 | |
63 | }; | |
252b5132 RH |
64 | |
65 | /* This approaches .0001 */ | |
e6c774b4 | 66 | static const LITTLENUM_TYPE minus_3[] = { |
252b5132 | 67 | 52534, 20027, 37329, 65116, 64067, 60397, 14784, 18979, 33659, 19503, |
e6c774b4 KH |
68 | 2726, 9542, 629, 2202, 40475, 10590, 4299, 47815, 36280, 6 |
69 | }; | |
70 | ||
71 | static const LITTLENUM_TYPE plus_3[] = { | |
72 | 10000 | |
73 | }; | |
252b5132 RH |
74 | |
75 | /* JF: this approaches 1e-8 */ | |
e6c774b4 | 76 | static const LITTLENUM_TYPE minus_4[] = { |
252b5132 | 77 | 22517, 49501, 54293, 19424, 60699, 6716, 24348, 22618, 23904, 21327, |
e6c774b4 KH |
78 | 3919, 44703, 19149, 28803, 48959, 6259, 50273, 62237, 42 |
79 | }; | |
80 | ||
252b5132 | 81 | /* This equals 1525 * 2^16 + 57600 */ |
e6c774b4 KH |
82 | static const LITTLENUM_TYPE plus_4[] = { |
83 | 57600, 1525 | |
84 | }; | |
252b5132 RH |
85 | |
86 | /* This approaches 1e-16 */ | |
e6c774b4 | 87 | static const LITTLENUM_TYPE minus_5[] = { |
252b5132 | 88 | 22199, 45957, 17005, 26266, 10526, 16260, 55017, 35680, 40443, 19789, |
e6c774b4 KH |
89 | 17356, 30195, 55905, 28426, 63010, 44197, 1844 |
90 | }; | |
252b5132 | 91 | |
e6c774b4 KH |
92 | static const LITTLENUM_TYPE plus_5[] = { |
93 | 28609, 34546, 35 | |
94 | }; | |
95 | ||
96 | static const LITTLENUM_TYPE minus_6[] = { | |
252b5132 | 97 | 30926, 26518, 13110, 43018, 54982, 48258, 24658, 15209, 63366, 11929, |
e6c774b4 KH |
98 | 20069, 43857, 60487, 51 |
99 | }; | |
252b5132 | 100 | |
e6c774b4 KH |
101 | static const LITTLENUM_TYPE plus_6[] = { |
102 | 61313, 34220, 16731, 11629, 1262 | |
103 | }; | |
252b5132 | 104 | |
e6c774b4 KH |
105 | static const LITTLENUM_TYPE minus_7[] = { |
106 | 29819, 14733, 21490, 40602, 31315, 65186, 2695 | |
107 | }; | |
108 | ||
109 | static const LITTLENUM_TYPE plus_7[] = { | |
110 | 7937, 49002, 60772, 28216, 38893, 55975, 63988, 59711, 20227, 24 | |
111 | }; | |
112 | ||
113 | static const LITTLENUM_TYPE minus_8[] = { | |
252b5132 | 114 | 27579, 64807, 12543, 794, 13907, 61297, 12013, 64360, 15961, 20566, |
e6c774b4 KH |
115 | 24178, 15922, 59427, 110 |
116 | }; | |
117 | ||
118 | static const LITTLENUM_TYPE plus_8[] = { | |
252b5132 | 119 | 15873, 11925, 39177, 991, 14589, 3861, 58415, 9076, 62956, 54223, |
e6c774b4 KH |
120 | 56328, 50180, 45274, 48333, 32537, 42547, 9731, 59679, 590 |
121 | }; | |
252b5132 | 122 | |
e6c774b4 | 123 | static const LITTLENUM_TYPE minus_9[] = { |
252b5132 RH |
124 | 11042, 8464, 58971, 63429, 6022, 63485, 5500, 53464, 47545, 50068, |
125 | 56988, 22819, 49708, 54493, 9920, 47667, 40409, 35764, 10383, 54466, | |
e6c774b4 KH |
126 | 32702, 17493, 32420, 34382, 22750, 20681, 12300 |
127 | }; | |
128 | ||
129 | static const LITTLENUM_TYPE plus_9[] = { | |
252b5132 RH |
130 | 20678, 27614, 28272, 53066, 55311, 54677, 29038, 9906, 26288, 44486, |
131 | 13860, 7445, 54106, 15426, 21518, 25599, 29632, 52309, 61207, 26105, | |
e6c774b4 KH |
132 | 10482, 21948, 51191, 32988, 60892, 62574, 61390, 24540, 21495, 5 |
133 | }; | |
252b5132 | 134 | |
e6c774b4 | 135 | static const LITTLENUM_TYPE minus_10[] = { |
252b5132 RH |
136 | 6214, 48771, 23471, 30163, 31763, 38013, 57001, 11770, 18263, 36366, |
137 | 20742, 45086, 56969, 53231, 37856, 55814, 38057, 15692, 46761, 8713, | |
e6c774b4 KH |
138 | 6102, 20083, 8269, 11839, 11571, 50963, 15649, 11698, 40675, 2308 |
139 | }; | |
140 | ||
141 | static const LITTLENUM_TYPE plus_10[] = { | |
252b5132 RH |
142 | 63839, 36576, 45712, 44516, 37803, 29482, 4966, 30556, 37961, 23310, |
143 | 27070, 44972, 29507, 48257, 45209, 7494, 17831, 38728, 41577, 29443, | |
e6c774b4 KH |
144 | 36016, 7955, 35339, 35479, 36011, 14553, 49618, 5588, 25396, 28 |
145 | }; | |
252b5132 | 146 | |
e6c774b4 | 147 | static const LITTLENUM_TYPE minus_11[] = { |
252b5132 RH |
148 | 16663, 56882, 61983, 7804, 36555, 32060, 34502, 1000, 14356, 21681, |
149 | 6605, 34767, 51411, 59048, 53614, 39850, 30079, 6496, 6846, 26841, | |
e6c774b4 KH |
150 | 40778, 19578, 59899, 44085, 54016, 24259, 11232, 21229, 21313, 81 |
151 | }; | |
152 | ||
153 | static const LITTLENUM_TYPE plus_11[] = { | |
252b5132 RH |
154 | 92, 9054, 62707, 17993, 7821, 56838, 13992, 21321, 29637, 48426, |
155 | 42982, 38668, 49574, 28820, 18200, 18927, 53979, 16219, 37484, 2516, | |
e6c774b4 KH |
156 | 44642, 14665, 11587, 41926, 13556, 23956, 54320, 6661, 55766, 805 |
157 | }; | |
252b5132 | 158 | |
e6c774b4 | 159 | static const LITTLENUM_TYPE minus_12[] = { |
252b5132 RH |
160 | 33202, 45969, 58804, 56734, 16482, 26007, 44984, 49334, 31007, 32944, |
161 | 44517, 63329, 47131, 15291, 59465, 2264, 23218, 11829, 59771, 38798, | |
e6c774b4 KH |
162 | 31051, 28748, 23129, 40541, 41562, 35108, 50620, 59014, 51817, 6613 |
163 | }; | |
164 | ||
165 | static const LITTLENUM_TYPE plus_12[] = { | |
252b5132 RH |
166 | 10098, 37922, 58070, 7432, 10470, 63465, 23718, 62190, 47420, 7009, |
167 | 38443, 4587, 45596, 38472, 52129, 52779, 29012, 13559, 48688, 31678, | |
e6c774b4 KH |
168 | 41753, 58662, 10668, 36067, 29906, 56906, 21461, 46556, 59571, 9 |
169 | }; | |
252b5132 | 170 | |
e6c774b4 | 171 | static const LITTLENUM_TYPE minus_13[] = { |
252b5132 RH |
172 | 45309, 27592, 37144, 34637, 34328, 41671, 34620, 24135, 53401, 22112, |
173 | 21576, 45147, 39310, 44051, 48572, 3676, 46544, 59768, 33350, 2323, | |
e6c774b4 KH |
174 | 49524, 61568, 3903, 36487, 36356, 30903, 14975, 9035, 29715, 667 |
175 | }; | |
176 | ||
177 | static const LITTLENUM_TYPE plus_13[] = { | |
252b5132 RH |
178 | 18788, 16960, 6318, 45685, 55400, 46230, 35794, 25588, 7253, 55541, |
179 | 49716, 59760, 63592, 8191, 63765, 58530, 44667, 13294, 10001, 55586, | |
e6c774b4 KH |
180 | 47887, 18738, 9509, 40896, 42506, 52580, 4171, 325, 12329, 98 |
181 | }; | |
252b5132 RH |
182 | |
183 | /* Shut up complaints about differing pointer types. They only differ | |
184 | in the const attribute, but there isn't any easy way to do this | |
185 | */ | |
186 | #define X (LITTLENUM_TYPE *) | |
187 | ||
e6c774b4 | 188 | const FLONUM_TYPE flonum_negative_powers_of_ten[] = { |
252b5132 RH |
189 | {X zero, X zero, X zero, 0, '+'}, |
190 | {X minus_1, X minus_1 + 19, X minus_1 + 19, -20, '+'}, | |
191 | {X minus_2, X minus_2 + 19, X minus_2 + 19, -20, '+'}, | |
192 | {X minus_3, X minus_3 + 19, X minus_3 + 19, -20, '+'}, | |
193 | {X minus_4, X minus_4 + 18, X minus_4 + 18, -20, '+'}, | |
194 | {X minus_5, X minus_5 + 16, X minus_5 + 16, -20, '+'}, | |
195 | {X minus_6, X minus_6 + 13, X minus_6 + 13, -20, '+'}, | |
196 | {X minus_7, X minus_7 + 6, X minus_7 + 6, -20, '+'}, | |
197 | {X minus_8, X minus_8 + 13, X minus_8 + 13, -40, '+'}, | |
198 | {X minus_9, X minus_9 + 26, X minus_9 + 26, -80, '+'}, | |
199 | {X minus_10, X minus_10 + 29, X minus_10 + 29, -136, '+'}, | |
200 | {X minus_11, X minus_11 + 29, X minus_11 + 29, -242, '+'}, | |
201 | {X minus_12, X minus_12 + 29, X minus_12 + 29, -455, '+'}, | |
202 | {X minus_13, X minus_13 + 29, X minus_13 + 29, -880, '+'}, | |
203 | }; | |
204 | ||
e6c774b4 | 205 | const FLONUM_TYPE flonum_positive_powers_of_ten[] = { |
252b5132 RH |
206 | {X zero, X zero, X zero, 0, '+'}, |
207 | {X plus_1, X plus_1 + 0, X plus_1 + 0, 0, '+'}, | |
208 | {X plus_2, X plus_2 + 0, X plus_2 + 0, 0, '+'}, | |
209 | {X plus_3, X plus_3 + 0, X plus_3 + 0, 0, '+'}, | |
210 | {X plus_4, X plus_4 + 1, X plus_4 + 1, 0, '+'}, | |
211 | {X plus_5, X plus_5 + 2, X plus_5 + 2, 1, '+'}, | |
212 | {X plus_6, X plus_6 + 4, X plus_6 + 4, 2, '+'}, | |
213 | {X plus_7, X plus_7 + 9, X plus_7 + 9, 4, '+'}, | |
214 | {X plus_8, X plus_8 + 18, X plus_8 + 18, 8, '+'}, | |
215 | {X plus_9, X plus_9 + 29, X plus_9 + 29, 24, '+'}, | |
216 | {X plus_10, X plus_10 + 29, X plus_10 + 29, 77, '+'}, | |
217 | {X plus_11, X plus_11 + 29, X plus_11 + 29, 183, '+'}, | |
218 | {X plus_12, X plus_12 + 29, X plus_12 + 29, 396, '+'}, | |
219 | {X plus_13, X plus_13 + 29, X plus_13 + 29, 821, '+'}, | |
220 | }; | |
221 | ||
222 | #ifdef VMS | |
3dd5103b NC |
223 | void |
224 | dummy1 () | |
225 | { | |
226 | } | |
252b5132 | 227 | #endif |