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