flonum-konst.c revision 78828
155714Skris/* flonum_const.c - Useful Flonum constants
255714Skris   Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 2000
355714Skris   Free Software Foundation, Inc.
455714Skris
555714Skris   This file is part of GAS, the GNU Assembler.
655714Skris
755714Skris   GAS is free software; you can redistribute it and/or modify
8280304Sjkim   it under the terms of the GNU General Public License as published by
955714Skris   the Free Software Foundation; either version 2, or (at your option)
1055714Skris   any later version.
1155714Skris
1255714Skris   GAS is distributed in the hope that it will be useful,
1355714Skris   but WITHOUT ANY WARRANTY; without even the implied warranty of
1455714Skris   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15280304Sjkim   GNU General Public License for more details.
1655714Skris
1755714Skris   You should have received a copy of the GNU General Public License
1855714Skris   along with GAS; see the file COPYING.  If not, write to the Free
1955714Skris   Software Foundation, 59 Temple Place - Suite 330, Boston, MA
2055714Skris   02111-1307, USA.  */
2155714Skris
22280304Sjkim#include <ansidecl.h>
2355714Skris#include "flonum.h"
2455714Skris/* JF:  I added the last entry to this table, and I'm not
2555714Skris   sure if its right or not.  Could go either way.  I wish
2655714Skris   I really understood this stuff.  */
2755714Skris
2855714Skrisconst int table_size_of_flonum_powers_of_ten = 13;
2955714Skris
3055714Skrisstatic const LITTLENUM_TYPE zero[] = {
3155714Skris  1
3255714Skris};
3355714Skris
3455714Skris/***********************************************************************\
3555714Skris *									*
3655714Skris *	Warning: the low order bits may be WRONG here.			*
37280304Sjkim *	I took this from a suspect bc(1) script.			*
3855714Skris *	"minus_X"[] is supposed to be 10^(2^-X) expressed in base 2^16.	*
3955714Skris *	The radix point is just AFTER the highest element of the []	*
40280304Sjkim *									*
4155714Skris *	Because bc rounds DOWN for printing (I think), the lowest	*
4255714Skris *	significance littlenums should probably have 1 added to them.	*
4355714Skris *									*
4455714Skris \***********************************************************************/
4555714Skris
4655714Skris/* JF:  If this equals 6553/(2^16)+39321/(2^32)+...  it approaches .1 */
4755714Skrisstatic const LITTLENUM_TYPE minus_1[] = {
4855714Skris  39322, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321,
4955714Skris  39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 6553
5055714Skris};
5155714Skris
52280304Sjkimstatic const LITTLENUM_TYPE plus_1[] = {
5355714Skris  10
5455714Skris};
5555714Skris
5655714Skris/* JF:  If this equals 655/(2^16) + 23592/(2^32) + ... it approaches .01 */
5755714Skrisstatic const LITTLENUM_TYPE minus_2[] = {
58109998Smarkm  10486, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 49807,
59109998Smarkm  10485, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 655
60109998Smarkm};
61109998Smarkm
62109998Smarkmstatic const LITTLENUM_TYPE plus_2[] = {
63109998Smarkm  100
64109998Smarkm};
65109998Smarkm
66280304Sjkim/* This approaches .0001 */
67109998Smarkmstatic const LITTLENUM_TYPE minus_3[] = {
68109998Smarkm  52534, 20027, 37329, 65116, 64067, 60397, 14784, 18979, 33659, 19503,
69109998Smarkm  2726, 9542, 629, 2202, 40475, 10590, 4299, 47815, 36280, 6
70109998Smarkm};
71109998Smarkm
72109998Smarkmstatic const LITTLENUM_TYPE plus_3[] = {
73109998Smarkm  10000
74109998Smarkm};
75109998Smarkm
76109998Smarkm/* JF: this approaches 1e-8 */
77109998Smarkmstatic const LITTLENUM_TYPE minus_4[] = {
78109998Smarkm  22517, 49501, 54293, 19424, 60699, 6716, 24348, 22618, 23904, 21327,
79109998Smarkm  3919, 44703, 19149, 28803, 48959, 6259, 50273, 62237, 42
80109998Smarkm};
81109998Smarkm
82109998Smarkm/* This equals 1525 * 2^16 + 57600 */
83109998Smarkmstatic const LITTLENUM_TYPE plus_4[] = {
84109998Smarkm  57600, 1525
85109998Smarkm};
86109998Smarkm
87109998Smarkm/* This approaches 1e-16 */
88109998Smarkmstatic const LITTLENUM_TYPE minus_5[] = {
89109998Smarkm  22199, 45957, 17005, 26266, 10526, 16260, 55017, 35680, 40443, 19789,
90109998Smarkm  17356, 30195, 55905, 28426, 63010, 44197, 1844
91109998Smarkm};
92109998Smarkm
93109998Smarkmstatic const LITTLENUM_TYPE plus_5[] = {
94109998Smarkm  28609, 34546, 35
95109998Smarkm};
96109998Smarkm
97109998Smarkmstatic const LITTLENUM_TYPE minus_6[] = {
98109998Smarkm  30926, 26518, 13110, 43018, 54982, 48258, 24658, 15209, 63366, 11929,
99109998Smarkm  20069, 43857, 60487, 51
100109998Smarkm};
101109998Smarkm
102109998Smarkmstatic const LITTLENUM_TYPE plus_6[] = {
103109998Smarkm  61313, 34220, 16731, 11629, 1262
104109998Smarkm};
105109998Smarkm
106109998Smarkmstatic const LITTLENUM_TYPE minus_7[] = {
107109998Smarkm  29819, 14733, 21490, 40602, 31315, 65186, 2695
108109998Smarkm};
109109998Smarkm
110109998Smarkmstatic const LITTLENUM_TYPE plus_7[] = {
11155714Skris  7937, 49002, 60772, 28216, 38893, 55975, 63988, 59711, 20227, 24
11255714Skris};
11355714Skris
11455714Skrisstatic const LITTLENUM_TYPE minus_8[] = {
11555714Skris  27579, 64807, 12543, 794, 13907, 61297, 12013, 64360, 15961, 20566,
11655714Skris  24178, 15922, 59427, 110
11755714Skris};
118160814Ssimon
119109998Smarkmstatic const LITTLENUM_TYPE plus_8[] = {
120109998Smarkm  15873, 11925, 39177, 991, 14589, 3861, 58415, 9076, 62956, 54223,
121109998Smarkm  56328, 50180, 45274, 48333, 32537, 42547, 9731, 59679, 590
122109998Smarkm};
123109998Smarkm
124109998Smarkmstatic const LITTLENUM_TYPE minus_9[] = {
125109998Smarkm  11042, 8464, 58971, 63429, 6022, 63485, 5500, 53464, 47545, 50068,
126109998Smarkm  56988, 22819, 49708, 54493, 9920, 47667, 40409, 35764, 10383, 54466,
127109998Smarkm  32702, 17493, 32420, 34382, 22750, 20681, 12300
128109998Smarkm};
129109998Smarkm
130109998Smarkmstatic const LITTLENUM_TYPE plus_9[] = {
131109998Smarkm  20678, 27614, 28272, 53066, 55311, 54677, 29038, 9906, 26288, 44486,
132109998Smarkm  13860, 7445, 54106, 15426, 21518, 25599, 29632, 52309, 61207, 26105,
133109998Smarkm  10482, 21948, 51191, 32988, 60892, 62574, 61390, 24540, 21495, 5
13455714Skris};
13555714Skris
136280304Sjkimstatic const LITTLENUM_TYPE minus_10[] = {
13755714Skris  6214, 48771, 23471, 30163, 31763, 38013, 57001, 11770, 18263, 36366,
13859191Skris  20742, 45086, 56969, 53231, 37856, 55814, 38057, 15692, 46761, 8713,
13959191Skris  6102, 20083, 8269, 11839, 11571, 50963, 15649, 11698, 40675, 2308
14055714Skris};
141280304Sjkim
142280304Sjkimstatic const LITTLENUM_TYPE plus_10[] = {
143280304Sjkim  63839, 36576, 45712, 44516, 37803, 29482, 4966, 30556, 37961, 23310,
14455714Skris  27070, 44972, 29507, 48257, 45209, 7494, 17831, 38728, 41577, 29443,
145280304Sjkim  36016, 7955, 35339, 35479, 36011, 14553, 49618, 5588, 25396, 28
14655714Skris};
147280304Sjkim
148280304Sjkimstatic const LITTLENUM_TYPE minus_11[] = {
149280304Sjkim  16663, 56882, 61983, 7804, 36555, 32060, 34502, 1000, 14356, 21681,
15055714Skris  6605, 34767, 51411, 59048, 53614, 39850, 30079, 6496, 6846, 26841,
151280304Sjkim  40778, 19578, 59899, 44085, 54016, 24259, 11232, 21229, 21313, 81
152280304Sjkim};
153280304Sjkim
154280304Sjkimstatic const LITTLENUM_TYPE plus_11[] = {
155280304Sjkim  92, 9054, 62707, 17993, 7821, 56838, 13992, 21321, 29637, 48426,
156280304Sjkim  42982, 38668, 49574, 28820, 18200, 18927, 53979, 16219, 37484, 2516,
157280304Sjkim  44642, 14665, 11587, 41926, 13556, 23956, 54320, 6661, 55766, 805
158280304Sjkim};
159280304Sjkim
160280304Sjkimstatic const LITTLENUM_TYPE minus_12[] = {
161280304Sjkim  33202, 45969, 58804, 56734, 16482, 26007, 44984, 49334, 31007, 32944,
162280304Sjkim  44517, 63329, 47131, 15291, 59465, 2264, 23218, 11829, 59771, 38798,
163280304Sjkim  31051, 28748, 23129, 40541, 41562, 35108, 50620, 59014, 51817, 6613
164280304Sjkim};
165280304Sjkim
166280304Sjkimstatic const LITTLENUM_TYPE plus_12[] = {
167280304Sjkim  10098, 37922, 58070, 7432, 10470, 63465, 23718, 62190, 47420, 7009,
168280304Sjkim  38443, 4587, 45596, 38472, 52129, 52779, 29012, 13559, 48688, 31678,
169280304Sjkim  41753, 58662, 10668, 36067, 29906, 56906, 21461, 46556, 59571, 9
170280304Sjkim};
171280304Sjkim
172280304Sjkimstatic const LITTLENUM_TYPE minus_13[] = {
173280304Sjkim  45309, 27592, 37144, 34637, 34328, 41671, 34620, 24135, 53401, 22112,
17455714Skris  21576, 45147, 39310, 44051, 48572, 3676, 46544, 59768, 33350, 2323,
175280304Sjkim  49524, 61568, 3903, 36487, 36356, 30903, 14975, 9035, 29715, 667
176280304Sjkim};
177280304Sjkim
178280304Sjkimstatic const LITTLENUM_TYPE plus_13[] = {
179280304Sjkim  18788, 16960, 6318, 45685, 55400, 46230, 35794, 25588, 7253, 55541,
180280304Sjkim  49716, 59760, 63592, 8191, 63765, 58530, 44667, 13294, 10001, 55586,
181280304Sjkim  47887, 18738, 9509, 40896, 42506, 52580, 4171, 325, 12329, 98
182280304Sjkim};
183280304Sjkim
184280304Sjkim/* Shut up complaints about differing pointer types.  They only differ
185280304Sjkim   in the const attribute, but there isn't any easy way to do this
186280304Sjkim   */
187280304Sjkim#define X (LITTLENUM_TYPE *)
188280304Sjkim
189280304Sjkimconst FLONUM_TYPE flonum_negative_powers_of_ten[] = {
190109998Smarkm  {X zero, X zero, X zero, 0, '+'},
191280304Sjkim  {X minus_1, X minus_1 + 19, X minus_1 + 19, -20, '+'},
19255714Skris  {X minus_2, X minus_2 + 19, X minus_2 + 19, -20, '+'},
193109998Smarkm  {X minus_3, X minus_3 + 19, X minus_3 + 19, -20, '+'},
194280304Sjkim  {X minus_4, X minus_4 + 18, X minus_4 + 18, -20, '+'},
19555714Skris  {X minus_5, X minus_5 + 16, X minus_5 + 16, -20, '+'},
196109998Smarkm  {X minus_6, X minus_6 + 13, X minus_6 + 13, -20, '+'},
197280304Sjkim  {X minus_7, X minus_7 + 6, X minus_7 + 6, -20, '+'},
19855714Skris  {X minus_8, X minus_8 + 13, X minus_8 + 13, -40, '+'},
199109998Smarkm  {X minus_9, X minus_9 + 26, X minus_9 + 26, -80, '+'},
200280304Sjkim  {X minus_10, X minus_10 + 29, X minus_10 + 29, -136, '+'},
20155714Skris  {X minus_11, X minus_11 + 29, X minus_11 + 29, -242, '+'},
202109998Smarkm  {X minus_12, X minus_12 + 29, X minus_12 + 29, -455, '+'},
203280304Sjkim  {X minus_13, X minus_13 + 29, X minus_13 + 29, -880, '+'},
20455714Skris};
205280304Sjkim
206280304Sjkimconst FLONUM_TYPE flonum_positive_powers_of_ten[] = {
207280304Sjkim  {X zero, X zero, X zero, 0, '+'},
208280304Sjkim  {X plus_1, X plus_1 + 0, X plus_1 + 0, 0, '+'},
209280304Sjkim  {X plus_2, X plus_2 + 0, X plus_2 + 0, 0, '+'},
210280304Sjkim  {X plus_3, X plus_3 + 0, X plus_3 + 0, 0, '+'},
211280304Sjkim  {X plus_4, X plus_4 + 1, X plus_4 + 1, 0, '+'},
212280304Sjkim  {X plus_5, X plus_5 + 2, X plus_5 + 2, 1, '+'},
213280304Sjkim  {X plus_6, X plus_6 + 4, X plus_6 + 4, 2, '+'},
214280304Sjkim  {X plus_7, X plus_7 + 9, X plus_7 + 9, 4, '+'},
215  {X plus_8, X plus_8 + 18, X plus_8 + 18, 8, '+'},
216  {X plus_9, X plus_9 + 29, X plus_9 + 29, 24, '+'},
217  {X plus_10, X plus_10 + 29, X plus_10 + 29, 77, '+'},
218  {X plus_11, X plus_11 + 29, X plus_11 + 29, 183, '+'},
219  {X plus_12, X plus_12 + 29, X plus_12 + 29, 396, '+'},
220  {X plus_13, X plus_13 + 29, X plus_13 + 29, 821, '+'},
221};
222
223#ifdef VMS
224void
225dummy1 ()
226{
227}
228#endif
229