]>
Commit | Line | Data |
---|---|---|
fecd2382 | 1 | /* flonum_const.c - Useful Flonum constants |
01170860 | 2 | Copyright (C) 1987, 1990, 1991, 1992 Free Software Foundation, Inc. |
a39116f1 RP |
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 | |
8 | the Free Software Foundation; either version 2, or (at your option) | |
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 | |
18 | the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ | |
fecd2382 | 19 | |
fecd2382 RP |
20 | #include "flonum.h" |
21 | /* JF: I added the last entry to this table, and I'm not | |
22 | sure if its right or not. Could go either way. I wish | |
23 | I really understood this stuff. */ | |
24 | ||
25 | ||
26 | const int table_size_of_flonum_powers_of_ten = 11; | |
27 | ||
28 | static const LITTLENUM_TYPE zero[] = { 1 }; | |
29 | ||
30 | /***********************************************************************\ | |
a39116f1 RP |
31 | * * |
32 | * Warning: the low order bits may be WRONG here. * | |
33 | * I took this from a suspect bc(1) script. * | |
34 | * "minus_X"[] is supposed to be 10^(2^-X) expressed in base 2^16. * | |
35 | * The radix point is just AFTER the highest element of the [] * | |
36 | * * | |
37 | * Because bc rounds DOWN for printing (I think), the lowest * | |
38 | * significance littlenums should probably have 1 added to them. * | |
39 | * * | |
40 | \***********************************************************************/ | |
fecd2382 RP |
41 | |
42 | /* JF: If this equals 6553/(2^16)+39321/(2^32)+... it approaches .1 */ | |
43 | static const LITTLENUM_TYPE minus_1 [] = { | |
a39116f1 RP |
44 | 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, |
45 | 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 6553 }; | |
fecd2382 RP |
46 | static const LITTLENUM_TYPE plus_1 [] = { 10 }; |
47 | ||
48 | /* JF: If this equals 655/(2^16) + 23592/(2^32) + ... it approaches .01 */ | |
49 | static const LITTLENUM_TYPE minus_2 [] = { | |
a39116f1 RP |
50 | 10485, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 49807, |
51 | 10485, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 655 }; | |
fecd2382 RP |
52 | static const LITTLENUM_TYPE plus_2 [] = { 100 }; |
53 | ||
54 | /* This approaches .0001 */ | |
55 | static const LITTLENUM_TYPE minus_3 [] = { | |
a39116f1 RP |
56 | 52533, 20027, 37329, 65116, 64067, 60397, 14784, 18979, 33659, 19503, |
57 | 2726, 9542, 629, 2202, 40475, 10590, 4299, 47815, 36280, 6 }; | |
fecd2382 RP |
58 | static const LITTLENUM_TYPE plus_3 [] = { 10000 }; |
59 | ||
60 | /* JF: this approaches 1e-8 */ | |
61 | static const LITTLENUM_TYPE minus_4 [] = { | |
a39116f1 RP |
62 | 22516, 49501, 54293, 19424, 60699, 6716, 24348, 22618, 23904, 21327, |
63 | 3919, 44703, 19149, 28803, 48959, 6259, 50273, 62237, 42 }; | |
fecd2382 RP |
64 | /* This equals 1525 * 2^16 + 57600 */ |
65 | static const LITTLENUM_TYPE plus_4 [] = { 57600, 1525 }; | |
66 | ||
67 | /* This approaches 1e-16 */ | |
68 | static const LITTLENUM_TYPE minus_5 [] = { | |
a39116f1 RP |
69 | 22199, 45957, 17005, 26266, 10526, 16260, 55017, 35680, 40443, 19789, |
70 | 17356, 30195, 55905, 28426, 63010, 44197, 1844 }; | |
fecd2382 RP |
71 | static const LITTLENUM_TYPE plus_5 [] = { 28609, 34546, 35 }; |
72 | ||
73 | static const LITTLENUM_TYPE minus_6 [] = { | |
a39116f1 RP |
74 | 30926, 26518, 13110, 43018, 54982, 48258, 24658, 15209, 63366, 11929, |
75 | 20069, 43857, 60487, 51 }; | |
fecd2382 RP |
76 | static const LITTLENUM_TYPE plus_6 [] = { 61313, 34220, 16731, 11629, 1262 }; |
77 | ||
78 | static const LITTLENUM_TYPE minus_7 [] = { | |
a39116f1 | 79 | 29819, 14733, 21490, 40602, 31315, 65186, 2695 }; |
fecd2382 | 80 | static const LITTLENUM_TYPE plus_7 [] = { |
a39116f1 | 81 | 7937, 49002, 60772, 28216, 38893, 55975, 63988, 59711, 20227, 24 }; |
fecd2382 RP |
82 | |
83 | static const LITTLENUM_TYPE minus_8 [] = { | |
a39116f1 RP |
84 | 45849, 19069, 18068, 36324, 37948, 48745, 10873, 64360, 15961, 20566, |
85 | 24178, 15922, 59427, 110 }; | |
fecd2382 | 86 | static const LITTLENUM_TYPE plus_8 [] = { |
a39116f1 RP |
87 | 15873, 11925, 39177, 991, 14589, 19735, 25347, 65086, 53853, 938, |
88 | 37209, 47086, 33626, 23253, 32586, 42547, 9731, 59679, 590 }; | |
fecd2382 RP |
89 | |
90 | static const LITTLENUM_TYPE minus_9 [] = { | |
a39116f1 RP |
91 | 63601, 55221, 43562, 33661, 29067, 28203, 65417, 64352, 22462, 41110, |
92 | 12570, 28635, 23199, 50572, 28471, 27074, 46375, 64028, 13106, 63700, | |
93 | 32698, 17493, 32420, 34382, 22750, 20681, 12300 }; | |
fecd2382 | 94 | static const LITTLENUM_TYPE plus_9 [] = { |
a39116f1 RP |
95 | 63564, 61556, 29377, 54467, 18621, 28141, 36415, 61241, 47119, 30026, |
96 | 19740, 46002, 13541, 61413, 30480, 38664, 32205, 50593, 51112, 48904, | |
97 | 48263, 43814, 286, 30826, 52813, 62575, 61390, 24540, 21495, 5 }; | |
fecd2382 RP |
98 | |
99 | static const LITTLENUM_TYPE minus_10 [] = { | |
a39116f1 RP |
100 | 50313, 34681, 1464, 25889, 19575, 41125, 17635, 4598, 49708, 13427, |
101 | 17287, 56115, 53783, 38255, 32415, 17778, 31596, 7557, 20951, 18477, | |
102 | 40353, 1178, 44405, 11837, 11571, 50963, 15649, 11698, 40675, 2308, }; | |
fecd2382 | 103 | static const LITTLENUM_TYPE plus_10[] = { |
a39116f1 RP |
104 | 18520, 53764, 54535, 61910, 61962, 59843, 46270, 58053, 12473, 63785, |
105 | 2449, 43230, 50044, 47595, 10403, 35766, 32607, 1124, 24966, 35044, | |
106 | 25524, 23631, 18826, 14518, 58448, 14562, 49618, 5588, 25396, 28 }; | |
fecd2382 RP |
107 | |
108 | static const LITTLENUM_TYPE minus_11 [] = { | |
a39116f1 RP |
109 | 6223, 59909, 62437, 59960, 14652, 45336, 48800, 7647, 51962, 37982, |
110 | 60436, 58176, 26767, 8440, 9831, 48556, 20994, 14148, 6757, 17221, | |
111 | 60624, 46129, 53210, 44085, 54016, 24259, 11232, 21229, 21313, 81, }; | |
fecd2382 | 112 | static const LITTLENUM_TYPE plus_11 [] = { |
a39116f1 RP |
113 | 36159, 2055, 33615, 61362, 23581, 62454, 9748, 15275, 39284, 58636, |
114 | 16269, 42793, 47240, 45774, 50861, 48400, 9413, 40281, 4030, 9572, | |
115 | 7984, 33038, 59522, 19450, 40593, 24486, 54320, 6661, 55766, 805, }; | |
fecd2382 RP |
116 | |
117 | /* Shut up complaints about differing pointer types. They only differ | |
118 | in the const attribute, but there isn't any easy way to do this | |
a39116f1 | 119 | */ |
fecd2382 RP |
120 | #define X (LITTLENUM_TYPE *) |
121 | ||
122 | const FLONUM_TYPE flonum_negative_powers_of_ten [] = { | |
a39116f1 RP |
123 | {X zero, X zero, X zero, 0, '+'}, |
124 | {X minus_1, X minus_1 +19, X minus_1 + 19, -20, '+'}, | |
125 | {X minus_2, X minus_2 +19, X minus_2 + 19, -20, '+'}, | |
126 | {X minus_3, X minus_3 +19, X minus_3 + 19, -20, '+'}, | |
127 | {X minus_4, X minus_4 +18, X minus_4 + 18, -20, '+'}, | |
128 | {X minus_5, X minus_5 +16, X minus_5 + 16, -20, '+'}, | |
129 | {X minus_6, X minus_6 +13, X minus_6 + 13, -20, '+'}, | |
130 | {X minus_7, X minus_7 + 6, X minus_7 + 6, -20, '+'}, | |
131 | {X minus_8, X minus_8 +13, X minus_8 + 13, -40, '+'}, | |
132 | {X minus_9, X minus_9 +26, X minus_9 + 26, -80, '+'}, | |
133 | {X minus_10, X minus_10+29, X minus_10 + 29,-136, '+'}, | |
134 | {X minus_11, X minus_11+29, X minus_11 + 29,-242, '+'}, | |
fecd2382 RP |
135 | }; |
136 | ||
137 | const FLONUM_TYPE flonum_positive_powers_of_ten [] = { | |
a39116f1 RP |
138 | {X zero, X zero, X zero, 0, '+'}, |
139 | {X plus_1, X plus_1 + 0, X plus_1 + 0, 0, '+'}, | |
140 | {X plus_2, X plus_2 + 0, X plus_2 + 0, 0, '+'}, | |
141 | {X plus_3, X plus_3 + 0, X plus_3 + 0, 0, '+'}, | |
142 | {X plus_4, X plus_4 + 1, X plus_4 + 1, 0, '+'}, | |
143 | {X plus_5, X plus_5 + 2, X plus_5 + 2, 1, '+'}, | |
144 | {X plus_6, X plus_6 + 4, X plus_6 + 4, 2, '+'}, | |
145 | {X plus_7, X plus_7 + 9, X plus_7 + 9, 4, '+'}, | |
146 | {X plus_8, X plus_8 + 18, X plus_8 + 18, 8, '+'}, | |
147 | {X plus_9, X plus_9 + 29, X plus_9 + 29, 24, '+'}, | |
148 | {X plus_10, X plus_10 + 29, X plus_10 + 29, 77, '+'}, | |
149 | {X plus_11, X plus_11 + 29, X plus_11 + 29, 183, '+'}, | |
fecd2382 RP |
150 | }; |
151 | ||
152 | #ifdef VMS | |
153 | dummy1() | |
154 | { | |
155 | } | |
156 | #endif | |
8b228fe9 | 157 | /* end of flonum_const.c */ |