Back to index

cell-binutils  2.17cvs20070401
flonum-konst.c
Go to the documentation of this file.
00001 /* flonum_const.c - Useful Flonum constants
00002    Copyright 1987, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 2000, 2002
00003    Free Software Foundation, Inc.
00004 
00005    This file is part of GAS, the GNU Assembler.
00006 
00007    GAS is free software; you can redistribute it and/or modify
00008    it under the terms of the GNU General Public License as published by
00009    the Free Software Foundation; either version 2, or (at your option)
00010    any later version.
00011 
00012    GAS is distributed in the hope that it will be useful,
00013    but WITHOUT ANY WARRANTY; without even the implied warranty of
00014    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015    GNU General Public License for more details.
00016 
00017    You should have received a copy of the GNU General Public License
00018    along with GAS; see the file COPYING.  If not, write to the Free
00019    Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
00020    02110-1301, USA.  */
00021 
00022 #include "ansidecl.h"
00023 #include "flonum.h"
00024 /* JF:  I added the last entry to this table, and I'm not
00025    sure if its right or not.  Could go either way.  I wish
00026    I really understood this stuff.  */
00027 
00028 const int table_size_of_flonum_powers_of_ten = 13;
00029 
00030 static const LITTLENUM_TYPE zero[] = {
00031   1
00032 };
00033 
00034 /***********************************************************************\
00035  *                                                             *
00036  *     Warning: the low order bits may be WRONG here.                 *
00037  *     I took this from a suspect bc(1) script.                *
00038  *     "minus_X"[] is supposed to be 10^(2^-X) expressed in base 2^16.       *
00039  *     The radix point is just AFTER the highest element of the []    *
00040  *                                                             *
00041  *     Because bc rounds DOWN for printing (I think), the lowest      *
00042  *     significance littlenums should probably have 1 added to them.  *
00043  *                                                             *
00044  \***********************************************************************/
00045 
00046 /* JF:  If this equals 6553/(2^16)+39321/(2^32)+...  it approaches .1 */
00047 static const LITTLENUM_TYPE minus_1[] = {
00048   39322, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321,
00049   39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 39321, 6553
00050 };
00051 
00052 static const LITTLENUM_TYPE plus_1[] = {
00053   10
00054 };
00055 
00056 /* JF:  If this equals 655/(2^16) + 23592/(2^32) + ... it approaches .01 */
00057 static const LITTLENUM_TYPE minus_2[] = {
00058   10486, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 49807,
00059   10485, 36700, 62914, 23592, 49807, 10485, 36700, 62914, 23592, 655
00060 };
00061 
00062 static const LITTLENUM_TYPE plus_2[] = {
00063   100
00064 };
00065 
00066 /* This approaches .0001 */
00067 static const LITTLENUM_TYPE minus_3[] = {
00068   52534, 20027, 37329, 65116, 64067, 60397, 14784, 18979, 33659, 19503,
00069   2726, 9542, 629, 2202, 40475, 10590, 4299, 47815, 36280, 6
00070 };
00071 
00072 static const LITTLENUM_TYPE plus_3[] = {
00073   10000
00074 };
00075 
00076 /* JF: this approaches 1e-8 */
00077 static const LITTLENUM_TYPE minus_4[] = {
00078   22517, 49501, 54293, 19424, 60699, 6716, 24348, 22618, 23904, 21327,
00079   3919, 44703, 19149, 28803, 48959, 6259, 50273, 62237, 42
00080 };
00081 
00082 /* This equals 1525 * 2^16 + 57600 */
00083 static const LITTLENUM_TYPE plus_4[] = {
00084   57600, 1525
00085 };
00086 
00087 /* This approaches 1e-16 */
00088 static const LITTLENUM_TYPE minus_5[] = {
00089   22199, 45957, 17005, 26266, 10526, 16260, 55017, 35680, 40443, 19789,
00090   17356, 30195, 55905, 28426, 63010, 44197, 1844
00091 };
00092 
00093 static const LITTLENUM_TYPE plus_5[] = {
00094   28609, 34546, 35
00095 };
00096 
00097 static const LITTLENUM_TYPE minus_6[] = {
00098   30926, 26518, 13110, 43018, 54982, 48258, 24658, 15209, 63366, 11929,
00099   20069, 43857, 60487, 51
00100 };
00101 
00102 static const LITTLENUM_TYPE plus_6[] = {
00103   61313, 34220, 16731, 11629, 1262
00104 };
00105 
00106 static const LITTLENUM_TYPE minus_7[] = {
00107   29819, 14733, 21490, 40602, 31315, 65186, 2695
00108 };
00109 
00110 static const LITTLENUM_TYPE plus_7[] = {
00111   7937, 49002, 60772, 28216, 38893, 55975, 63988, 59711, 20227, 24
00112 };
00113 
00114 static const LITTLENUM_TYPE minus_8[] = {
00115   27579, 64807, 12543, 794, 13907, 61297, 12013, 64360, 15961, 20566,
00116   24178, 15922, 59427, 110
00117 };
00118 
00119 static const LITTLENUM_TYPE plus_8[] = {
00120   15873, 11925, 39177, 991, 14589, 3861, 58415, 9076, 62956, 54223,
00121   56328, 50180, 45274, 48333, 32537, 42547, 9731, 59679, 590
00122 };
00123 
00124 static const LITTLENUM_TYPE minus_9[] = {
00125   11042, 8464, 58971, 63429, 6022, 63485, 5500, 53464, 47545, 50068,
00126   56988, 22819, 49708, 54493, 9920, 47667, 40409, 35764, 10383, 54466,
00127   32702, 17493, 32420, 34382, 22750, 20681, 12300
00128 };
00129 
00130 static const LITTLENUM_TYPE plus_9[] = {
00131   20678, 27614, 28272, 53066, 55311, 54677, 29038, 9906, 26288, 44486,
00132   13860, 7445, 54106, 15426, 21518, 25599, 29632, 52309, 61207, 26105,
00133   10482, 21948, 51191, 32988, 60892, 62574, 61390, 24540, 21495, 5
00134 };
00135 
00136 static const LITTLENUM_TYPE minus_10[] = {
00137   6214, 48771, 23471, 30163, 31763, 38013, 57001, 11770, 18263, 36366,
00138   20742, 45086, 56969, 53231, 37856, 55814, 38057, 15692, 46761, 8713,
00139   6102, 20083, 8269, 11839, 11571, 50963, 15649, 11698, 40675, 2308
00140 };
00141 
00142 static const LITTLENUM_TYPE plus_10[] = {
00143   63839, 36576, 45712, 44516, 37803, 29482, 4966, 30556, 37961, 23310,
00144   27070, 44972, 29507, 48257, 45209, 7494, 17831, 38728, 41577, 29443,
00145   36016, 7955, 35339, 35479, 36011, 14553, 49618, 5588, 25396, 28
00146 };
00147 
00148 static const LITTLENUM_TYPE minus_11[] = {
00149   16663, 56882, 61983, 7804, 36555, 32060, 34502, 1000, 14356, 21681,
00150   6605, 34767, 51411, 59048, 53614, 39850, 30079, 6496, 6846, 26841,
00151   40778, 19578, 59899, 44085, 54016, 24259, 11232, 21229, 21313, 81
00152 };
00153 
00154 static const LITTLENUM_TYPE plus_11[] = {
00155   92, 9054, 62707, 17993, 7821, 56838, 13992, 21321, 29637, 48426,
00156   42982, 38668, 49574, 28820, 18200, 18927, 53979, 16219, 37484, 2516,
00157   44642, 14665, 11587, 41926, 13556, 23956, 54320, 6661, 55766, 805
00158 };
00159 
00160 static const LITTLENUM_TYPE minus_12[] = {
00161   33202, 45969, 58804, 56734, 16482, 26007, 44984, 49334, 31007, 32944,
00162   44517, 63329, 47131, 15291, 59465, 2264, 23218, 11829, 59771, 38798,
00163   31051, 28748, 23129, 40541, 41562, 35108, 50620, 59014, 51817, 6613
00164 };
00165 
00166 static const LITTLENUM_TYPE plus_12[] = {
00167   10098, 37922, 58070, 7432, 10470, 63465, 23718, 62190, 47420, 7009,
00168   38443, 4587, 45596, 38472, 52129, 52779, 29012, 13559, 48688, 31678,
00169   41753, 58662, 10668, 36067, 29906, 56906, 21461, 46556, 59571, 9
00170 };
00171 
00172 static const LITTLENUM_TYPE minus_13[] = {
00173   45309, 27592, 37144, 34637, 34328, 41671, 34620, 24135, 53401, 22112,
00174   21576, 45147, 39310, 44051, 48572, 3676, 46544, 59768, 33350, 2323,
00175   49524, 61568, 3903, 36487, 36356, 30903, 14975, 9035, 29715, 667
00176 };
00177 
00178 static const LITTLENUM_TYPE plus_13[] = {
00179   18788, 16960, 6318, 45685, 55400, 46230, 35794, 25588, 7253, 55541,
00180   49716, 59760, 63592, 8191, 63765, 58530, 44667, 13294, 10001, 55586,
00181   47887, 18738, 9509, 40896, 42506, 52580, 4171, 325, 12329, 98
00182 };
00183 
00184 /* Shut up complaints about differing pointer types.  They only differ
00185    in the const attribute, but there isn't any easy way to do this
00186    */
00187 #define X (LITTLENUM_TYPE *)
00188 
00189 const FLONUM_TYPE flonum_negative_powers_of_ten[] = {
00190   {X zero, X zero, X zero, 0, '+'},
00191   {X minus_1, X minus_1 + 19, X minus_1 + 19, -20, '+'},
00192   {X minus_2, X minus_2 + 19, X minus_2 + 19, -20, '+'},
00193   {X minus_3, X minus_3 + 19, X minus_3 + 19, -20, '+'},
00194   {X minus_4, X minus_4 + 18, X minus_4 + 18, -20, '+'},
00195   {X minus_5, X minus_5 + 16, X minus_5 + 16, -20, '+'},
00196   {X minus_6, X minus_6 + 13, X minus_6 + 13, -20, '+'},
00197   {X minus_7, X minus_7 + 6, X minus_7 + 6, -20, '+'},
00198   {X minus_8, X minus_8 + 13, X minus_8 + 13, -40, '+'},
00199   {X minus_9, X minus_9 + 26, X minus_9 + 26, -80, '+'},
00200   {X minus_10, X minus_10 + 29, X minus_10 + 29, -136, '+'},
00201   {X minus_11, X minus_11 + 29, X minus_11 + 29, -242, '+'},
00202   {X minus_12, X minus_12 + 29, X minus_12 + 29, -455, '+'},
00203   {X minus_13, X minus_13 + 29, X minus_13 + 29, -880, '+'},
00204 };
00205 
00206 const FLONUM_TYPE flonum_positive_powers_of_ten[] = {
00207   {X zero, X zero, X zero, 0, '+'},
00208   {X plus_1, X plus_1 + 0, X plus_1 + 0, 0, '+'},
00209   {X plus_2, X plus_2 + 0, X plus_2 + 0, 0, '+'},
00210   {X plus_3, X plus_3 + 0, X plus_3 + 0, 0, '+'},
00211   {X plus_4, X plus_4 + 1, X plus_4 + 1, 0, '+'},
00212   {X plus_5, X plus_5 + 2, X plus_5 + 2, 1, '+'},
00213   {X plus_6, X plus_6 + 4, X plus_6 + 4, 2, '+'},
00214   {X plus_7, X plus_7 + 9, X plus_7 + 9, 4, '+'},
00215   {X plus_8, X plus_8 + 18, X plus_8 + 18, 8, '+'},
00216   {X plus_9, X plus_9 + 29, X plus_9 + 29, 24, '+'},
00217   {X plus_10, X plus_10 + 29, X plus_10 + 29, 77, '+'},
00218   {X plus_11, X plus_11 + 29, X plus_11 + 29, 183, '+'},
00219   {X plus_12, X plus_12 + 29, X plus_12 + 29, 396, '+'},
00220   {X plus_13, X plus_13 + 29, X plus_13 + 29, 821, '+'},
00221 };
00222 
00223 #ifdef VMS
00224 void
00225 dummy1 ()
00226 {
00227 }
00228 #endif