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