xref: /dflybsd-src/contrib/mpfr/src/mpfr-gmp.c (revision 2786097444a0124b5d33763854de247e230c6629)
14a238c70SJohn Marino /* mpfr_gmp -- Limited gmp-impl emulator
24a238c70SJohn Marino    Modified version of the GMP files.
34a238c70SJohn Marino 
4*ab6d115fSJohn Marino Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 Free Software Foundation, Inc.
5*ab6d115fSJohn Marino Contributed by the AriC and Caramel projects, INRIA.
64a238c70SJohn Marino 
74a238c70SJohn Marino This file is part of the GNU MPFR Library.
84a238c70SJohn Marino 
94a238c70SJohn Marino The GNU MPFR Library is free software; you can redistribute it and/or modify
104a238c70SJohn Marino it under the terms of the GNU Lesser General Public License as published by
114a238c70SJohn Marino the Free Software Foundation; either version 3 of the License, or (at your
124a238c70SJohn Marino option) any later version.
134a238c70SJohn Marino 
144a238c70SJohn Marino The GNU MPFR Library is distributed in the hope that it will be useful, but
154a238c70SJohn Marino WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
164a238c70SJohn Marino or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
174a238c70SJohn Marino License for more details.
184a238c70SJohn Marino 
194a238c70SJohn Marino You should have received a copy of the GNU Lesser General Public License
204a238c70SJohn Marino along with the GNU MPFR Library; see the file COPYING.LESSER.  If not, see
214a238c70SJohn Marino http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
224a238c70SJohn Marino 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
234a238c70SJohn Marino 
244a238c70SJohn Marino #include <stdlib.h> /* For malloc, free, realloc and abort */
254a238c70SJohn Marino 
264a238c70SJohn Marino #include "mpfr-impl.h"
274a238c70SJohn Marino 
284a238c70SJohn Marino #ifndef MPFR_HAVE_GMP_IMPL
294a238c70SJohn Marino 
304a238c70SJohn Marino char             mpfr_rands_initialized = 0;
314a238c70SJohn Marino gmp_randstate_t  mpfr_rands;
324a238c70SJohn Marino 
334a238c70SJohn Marino const struct bases mpfr_bases[257] =
344a238c70SJohn Marino {
354a238c70SJohn Marino   /*  0 */ {0.0},
364a238c70SJohn Marino   /*  1 */ {1e37},
374a238c70SJohn Marino   /*  2 */ {1.0000000000000000},
384a238c70SJohn Marino   /*  3 */ {0.6309297535714574},
394a238c70SJohn Marino   /*  4 */ {0.5000000000000000},
404a238c70SJohn Marino   /*  5 */ {0.4306765580733931},
414a238c70SJohn Marino   /*  6 */ {0.3868528072345416},
424a238c70SJohn Marino   /*  7 */ {0.3562071871080222},
434a238c70SJohn Marino   /*  8 */ {0.3333333333333333},
444a238c70SJohn Marino   /*  9 */ {0.3154648767857287},
454a238c70SJohn Marino   /* 10 */ {0.3010299956639812},
464a238c70SJohn Marino   /* 11 */ {0.2890648263178878},
474a238c70SJohn Marino   /* 12 */ {0.2789429456511298},
484a238c70SJohn Marino   /* 13 */ {0.2702381544273197},
494a238c70SJohn Marino   /* 14 */ {0.2626495350371935},
504a238c70SJohn Marino   /* 15 */ {0.2559580248098155},
514a238c70SJohn Marino   /* 16 */ {0.2500000000000000},
524a238c70SJohn Marino   /* 17 */ {0.2446505421182260},
534a238c70SJohn Marino   /* 18 */ {0.2398124665681314},
544a238c70SJohn Marino   /* 19 */ {0.2354089133666382},
554a238c70SJohn Marino   /* 20 */ {0.2313782131597592},
564a238c70SJohn Marino   /* 21 */ {0.2276702486969530},
574a238c70SJohn Marino   /* 22 */ {0.2242438242175754},
584a238c70SJohn Marino   /* 23 */ {0.2210647294575037},
594a238c70SJohn Marino   /* 24 */ {0.2181042919855316},
604a238c70SJohn Marino   /* 25 */ {0.2153382790366965},
614a238c70SJohn Marino   /* 26 */ {0.2127460535533632},
624a238c70SJohn Marino   /* 27 */ {0.2103099178571525},
634a238c70SJohn Marino   /* 28 */ {0.2080145976765095},
644a238c70SJohn Marino   /* 29 */ {0.2058468324604344},
654a238c70SJohn Marino   /* 30 */ {0.2037950470905062},
664a238c70SJohn Marino   /* 31 */ {0.2018490865820999},
674a238c70SJohn Marino   /* 32 */ {0.2000000000000000},
684a238c70SJohn Marino   /* 33 */ {0.1982398631705605},
694a238c70SJohn Marino   /* 34 */ {0.1965616322328226},
704a238c70SJohn Marino   /* 35 */ {0.1949590218937863},
714a238c70SJohn Marino   /* 36 */ {0.1934264036172708},
724a238c70SJohn Marino   /* 37 */ {0.1919587200065601},
734a238c70SJohn Marino   /* 38 */ {0.1905514124267734},
744a238c70SJohn Marino   /* 39 */ {0.1892003595168700},
754a238c70SJohn Marino   /* 40 */ {0.1879018247091076},
764a238c70SJohn Marino   /* 41 */ {0.1866524112389434},
774a238c70SJohn Marino   /* 42 */ {0.1854490234153689},
784a238c70SJohn Marino   /* 43 */ {0.1842888331487062},
794a238c70SJohn Marino   /* 44 */ {0.1831692509136336},
804a238c70SJohn Marino   /* 45 */ {0.1820879004699383},
814a238c70SJohn Marino   /* 46 */ {0.1810425967800402},
824a238c70SJohn Marino   /* 47 */ {0.1800313266566926},
834a238c70SJohn Marino   /* 48 */ {0.1790522317510414},
844a238c70SJohn Marino   /* 49 */ {0.1781035935540111},
854a238c70SJohn Marino   /* 50 */ {0.1771838201355579},
864a238c70SJohn Marino   /* 51 */ {0.1762914343888821},
874a238c70SJohn Marino   /* 52 */ {0.1754250635819545},
884a238c70SJohn Marino   /* 53 */ {0.1745834300480449},
894a238c70SJohn Marino   /* 54 */ {0.1737653428714400},
904a238c70SJohn Marino   /* 55 */ {0.1729696904450771},
914a238c70SJohn Marino   /* 56 */ {0.1721954337940981},
924a238c70SJohn Marino   /* 57 */ {0.1714416005739134},
934a238c70SJohn Marino   /* 58 */ {0.1707072796637201},
944a238c70SJohn Marino   /* 59 */ {0.1699916162869140},
954a238c70SJohn Marino   /* 60 */ {0.1692938075987814},
964a238c70SJohn Marino   /* 61 */ {0.1686130986895011},
974a238c70SJohn Marino   /* 62 */ {0.1679487789570419},
984a238c70SJohn Marino   /* 63 */ {0.1673001788101741},
994a238c70SJohn Marino   /* 64 */ {0.1666666666666667},
1004a238c70SJohn Marino   /* 65 */ {0.1660476462159378},
1014a238c70SJohn Marino   /* 66 */ {0.1654425539190583},
1024a238c70SJohn Marino   /* 67 */ {0.1648508567221603},
1034a238c70SJohn Marino   /* 68 */ {0.1642720499620502},
1044a238c70SJohn Marino   /* 69 */ {0.1637056554452156},
1054a238c70SJohn Marino   /* 70 */ {0.1631512196835108},
1064a238c70SJohn Marino   /* 71 */ {0.1626083122716342},
1074a238c70SJohn Marino   /* 72 */ {0.1620765243931223},
1084a238c70SJohn Marino   /* 73 */ {0.1615554674429964},
1094a238c70SJohn Marino   /* 74 */ {0.1610447717564444},
1104a238c70SJohn Marino   /* 75 */ {0.1605440854340214},
1114a238c70SJohn Marino   /* 76 */ {0.1600530732548213},
1124a238c70SJohn Marino   /* 77 */ {0.1595714156699382},
1134a238c70SJohn Marino   /* 78 */ {0.1590988078692941},
1144a238c70SJohn Marino   /* 79 */ {0.1586349589155960},
1154a238c70SJohn Marino   /* 80 */ {0.1581795909397823},
1164a238c70SJohn Marino   /* 81 */ {0.1577324383928644},
1174a238c70SJohn Marino   /* 82 */ {0.1572932473495469},
1184a238c70SJohn Marino   /* 83 */ {0.1568617748594410},
1194a238c70SJohn Marino   /* 84 */ {0.1564377883420715},
1204a238c70SJohn Marino   /* 85 */ {0.1560210650222250},
1214a238c70SJohn Marino   /* 86 */ {0.1556113914024939},
1224a238c70SJohn Marino   /* 87 */ {0.1552085627701551},
1234a238c70SJohn Marino   /* 88 */ {0.1548123827357682},
1244a238c70SJohn Marino   /* 89 */ {0.1544226628011101},
1254a238c70SJohn Marino   /* 90 */ {0.1540392219542636},
1264a238c70SJohn Marino   /* 91 */ {0.1536618862898642},
1274a238c70SJohn Marino   /* 92 */ {0.1532904886526781},
1284a238c70SJohn Marino   /* 93 */ {0.1529248683028321},
1294a238c70SJohn Marino   /* 94 */ {0.1525648706011593},
1304a238c70SJohn Marino   /* 95 */ {0.1522103467132434},
1314a238c70SJohn Marino   /* 96 */ {0.1518611533308632},
1324a238c70SJohn Marino   /* 97 */ {0.1515171524096389},
1334a238c70SJohn Marino   /* 98 */ {0.1511782109217764},
1344a238c70SJohn Marino   /* 99 */ {0.1508442006228941},
1354a238c70SJohn Marino   /* 100 */ {0.1505149978319906},
1364a238c70SJohn Marino   /* 101 */ {0.1501904832236880},
1374a238c70SJohn Marino   /* 102 */ {0.1498705416319474},
1384a238c70SJohn Marino   /* 103 */ {0.1495550618645152},
1394a238c70SJohn Marino   /* 104 */ {0.1492439365274121},
1404a238c70SJohn Marino   /* 105 */ {0.1489370618588283},
1414a238c70SJohn Marino   /* 106 */ {0.1486343375718350},
1424a238c70SJohn Marino   /* 107 */ {0.1483356667053617},
1434a238c70SJohn Marino   /* 108 */ {0.1480409554829326},
1444a238c70SJohn Marino   /* 109 */ {0.1477501131786861},
1454a238c70SJohn Marino   /* 110 */ {0.1474630519902391},
1464a238c70SJohn Marino   /* 111 */ {0.1471796869179852},
1474a238c70SJohn Marino   /* 112 */ {0.1468999356504447},
1484a238c70SJohn Marino   /* 113 */ {0.1466237184553111},
1494a238c70SJohn Marino   /* 114 */ {0.1463509580758620},
1504a238c70SJohn Marino   /* 115 */ {0.1460815796324244},
1514a238c70SJohn Marino   /* 116 */ {0.1458155105286054},
1524a238c70SJohn Marino   /* 117 */ {0.1455526803620167},
1534a238c70SJohn Marino   /* 118 */ {0.1452930208392429},
1544a238c70SJohn Marino   /* 119 */ {0.1450364656948130},
1554a238c70SJohn Marino   /* 120 */ {0.1447829506139581},
1564a238c70SJohn Marino   /* 121 */ {0.1445324131589439},
1574a238c70SJohn Marino   /* 122 */ {0.1442847926987864},
1584a238c70SJohn Marino   /* 123 */ {0.1440400303421672},
1594a238c70SJohn Marino   /* 124 */ {0.1437980688733776},
1604a238c70SJohn Marino   /* 125 */ {0.1435588526911310},
1614a238c70SJohn Marino   /* 126 */ {0.1433223277500932},
1624a238c70SJohn Marino   /* 127 */ {0.1430884415049874},
1634a238c70SJohn Marino   /* 128 */ {0.1428571428571428},
1644a238c70SJohn Marino   /* 129 */ {0.1426283821033600},
1654a238c70SJohn Marino   /* 130 */ {0.1424021108869747},
1664a238c70SJohn Marino   /* 131 */ {0.1421782821510107},
1674a238c70SJohn Marino   /* 132 */ {0.1419568500933153},
1684a238c70SJohn Marino   /* 133 */ {0.1417377701235801},
1694a238c70SJohn Marino   /* 134 */ {0.1415209988221527},
1704a238c70SJohn Marino   /* 135 */ {0.1413064939005528},
1714a238c70SJohn Marino   /* 136 */ {0.1410942141636095},
1724a238c70SJohn Marino   /* 137 */ {0.1408841194731412},
1734a238c70SJohn Marino   /* 138 */ {0.1406761707131039},
1744a238c70SJohn Marino   /* 139 */ {0.1404703297561400},
1754a238c70SJohn Marino   /* 140 */ {0.1402665594314587},
1764a238c70SJohn Marino   /* 141 */ {0.1400648234939879},
1774a238c70SJohn Marino   /* 142 */ {0.1398650865947379},
1784a238c70SJohn Marino   /* 143 */ {0.1396673142523192},
1794a238c70SJohn Marino   /* 144 */ {0.1394714728255649},
1804a238c70SJohn Marino   /* 145 */ {0.1392775294872041},
1814a238c70SJohn Marino   /* 146 */ {0.1390854521985406},
1824a238c70SJohn Marino   /* 147 */ {0.1388952096850913},
1834a238c70SJohn Marino   /* 148 */ {0.1387067714131417},
1844a238c70SJohn Marino   /* 149 */ {0.1385201075671774},
1854a238c70SJohn Marino   /* 150 */ {0.1383351890281539},
1864a238c70SJohn Marino   /* 151 */ {0.1381519873525671},
1874a238c70SJohn Marino   /* 152 */ {0.1379704747522905},
1884a238c70SJohn Marino   /* 153 */ {0.1377906240751463},
1894a238c70SJohn Marino   /* 154 */ {0.1376124087861776},
1904a238c70SJohn Marino   /* 155 */ {0.1374358029495937},
1914a238c70SJohn Marino   /* 156 */ {0.1372607812113589},
1924a238c70SJohn Marino   /* 157 */ {0.1370873187823978},
1934a238c70SJohn Marino   /* 158 */ {0.1369153914223921},
1944a238c70SJohn Marino   /* 159 */ {0.1367449754241439},
1954a238c70SJohn Marino   /* 160 */ {0.1365760475984821},
1964a238c70SJohn Marino   /* 161 */ {0.1364085852596902},
1974a238c70SJohn Marino   /* 162 */ {0.1362425662114337},
1984a238c70SJohn Marino   /* 163 */ {0.1360779687331669},
1994a238c70SJohn Marino   /* 164 */ {0.1359147715670014},
2004a238c70SJohn Marino   /* 165 */ {0.1357529539050150},
2014a238c70SJohn Marino   /* 166 */ {0.1355924953769864},
2024a238c70SJohn Marino   /* 167 */ {0.1354333760385373},
2034a238c70SJohn Marino   /* 168 */ {0.1352755763596663},
2044a238c70SJohn Marino   /* 169 */ {0.1351190772136599},
2054a238c70SJohn Marino   /* 170 */ {0.1349638598663645},
2064a238c70SJohn Marino   /* 171 */ {0.1348099059658080},
2074a238c70SJohn Marino   /* 172 */ {0.1346571975321549},
2084a238c70SJohn Marino   /* 173 */ {0.1345057169479844},
2094a238c70SJohn Marino   /* 174 */ {0.1343554469488779},
2104a238c70SJohn Marino   /* 175 */ {0.1342063706143054},
2114a238c70SJohn Marino   /* 176 */ {0.1340584713587979},
2124a238c70SJohn Marino   /* 177 */ {0.1339117329233981},
2134a238c70SJohn Marino   /* 178 */ {0.1337661393673756},
2144a238c70SJohn Marino   /* 179 */ {0.1336216750601996},
2154a238c70SJohn Marino   /* 180 */ {0.1334783246737591},
2164a238c70SJohn Marino   /* 181 */ {0.1333360731748201},
2174a238c70SJohn Marino   /* 182 */ {0.1331949058177136},
2184a238c70SJohn Marino   /* 183 */ {0.1330548081372441},
2194a238c70SJohn Marino   /* 184 */ {0.1329157659418126},
2204a238c70SJohn Marino   /* 185 */ {0.1327777653067443},
2214a238c70SJohn Marino   /* 186 */ {0.1326407925678156},
2224a238c70SJohn Marino   /* 187 */ {0.1325048343149731},
2234a238c70SJohn Marino   /* 188 */ {0.1323698773862368},
2244a238c70SJohn Marino   /* 189 */ {0.1322359088617821},
2254a238c70SJohn Marino   /* 190 */ {0.1321029160581950},
2264a238c70SJohn Marino   /* 191 */ {0.1319708865228925},
2274a238c70SJohn Marino   /* 192 */ {0.1318398080287045},
2284a238c70SJohn Marino   /* 193 */ {0.1317096685686114},
2294a238c70SJohn Marino   /* 194 */ {0.1315804563506306},
2304a238c70SJohn Marino   /* 195 */ {0.1314521597928493},
2314a238c70SJohn Marino   /* 196 */ {0.1313247675185968},
2324a238c70SJohn Marino   /* 197 */ {0.1311982683517524},
2334a238c70SJohn Marino   /* 198 */ {0.1310726513121843},
2344a238c70SJohn Marino   /* 199 */ {0.1309479056113158},
2354a238c70SJohn Marino   /* 200 */ {0.1308240206478128},
2364a238c70SJohn Marino   /* 201 */ {0.1307009860033912},
2374a238c70SJohn Marino   /* 202 */ {0.1305787914387386},
2384a238c70SJohn Marino   /* 203 */ {0.1304574268895465},
2394a238c70SJohn Marino   /* 204 */ {0.1303368824626505},
2404a238c70SJohn Marino   /* 205 */ {0.1302171484322746},
2414a238c70SJohn Marino   /* 206 */ {0.1300982152363760},
2424a238c70SJohn Marino   /* 207 */ {0.1299800734730872},
2434a238c70SJohn Marino   /* 208 */ {0.1298627138972530},
2444a238c70SJohn Marino   /* 209 */ {0.1297461274170591},
2454a238c70SJohn Marino   /* 210 */ {0.1296303050907487},
2464a238c70SJohn Marino   /* 211 */ {0.1295152381234257},
2474a238c70SJohn Marino   /* 212 */ {0.1294009178639407},
2484a238c70SJohn Marino   /* 213 */ {0.1292873358018581},
2494a238c70SJohn Marino   /* 214 */ {0.1291744835645007},
2504a238c70SJohn Marino   /* 215 */ {0.1290623529140715},
2514a238c70SJohn Marino   /* 216 */ {0.1289509357448472},
2524a238c70SJohn Marino   /* 217 */ {0.1288402240804449},
2534a238c70SJohn Marino   /* 218 */ {0.1287302100711566},
2544a238c70SJohn Marino   /* 219 */ {0.1286208859913518},
2554a238c70SJohn Marino   /* 220 */ {0.1285122442369443},
2564a238c70SJohn Marino   /* 221 */ {0.1284042773229231},
2574a238c70SJohn Marino   /* 222 */ {0.1282969778809442},
2584a238c70SJohn Marino   /* 223 */ {0.1281903386569819},
2594a238c70SJohn Marino   /* 224 */ {0.1280843525090381},
2604a238c70SJohn Marino   /* 225 */ {0.1279790124049077},
2614a238c70SJohn Marino   /* 226 */ {0.1278743114199984},
2624a238c70SJohn Marino   /* 227 */ {0.1277702427352035},
2634a238c70SJohn Marino   /* 228 */ {0.1276667996348261},
2644a238c70SJohn Marino   /* 229 */ {0.1275639755045533},
2654a238c70SJohn Marino   /* 230 */ {0.1274617638294791},
2664a238c70SJohn Marino   /* 231 */ {0.1273601581921740},
2674a238c70SJohn Marino   /* 232 */ {0.1272591522708010},
2684a238c70SJohn Marino   /* 233 */ {0.1271587398372755},
2694a238c70SJohn Marino   /* 234 */ {0.1270589147554692},
2704a238c70SJohn Marino   /* 235 */ {0.1269596709794558},
2714a238c70SJohn Marino   /* 236 */ {0.1268610025517973},
2724a238c70SJohn Marino   /* 237 */ {0.1267629036018709},
2734a238c70SJohn Marino   /* 238 */ {0.1266653683442337},
2744a238c70SJohn Marino   /* 239 */ {0.1265683910770258},
2754a238c70SJohn Marino   /* 240 */ {0.1264719661804097},
2764a238c70SJohn Marino   /* 241 */ {0.1263760881150453},
2774a238c70SJohn Marino   /* 242 */ {0.1262807514205999},
2784a238c70SJohn Marino   /* 243 */ {0.1261859507142915},
2794a238c70SJohn Marino   /* 244 */ {0.1260916806894653},
2804a238c70SJohn Marino   /* 245 */ {0.1259979361142023},
2814a238c70SJohn Marino   /* 246 */ {0.1259047118299582},
2824a238c70SJohn Marino   /* 247 */ {0.1258120027502338},
2834a238c70SJohn Marino   /* 248 */ {0.1257198038592741},
2844a238c70SJohn Marino   /* 249 */ {0.1256281102107963},
2854a238c70SJohn Marino   /* 250 */ {0.1255369169267456},
2864a238c70SJohn Marino   /* 251 */ {0.1254462191960791},
2874a238c70SJohn Marino   /* 252 */ {0.1253560122735751},
2884a238c70SJohn Marino   /* 253 */ {0.1252662914786691},
2894a238c70SJohn Marino   /* 254 */ {0.1251770521943144},
2904a238c70SJohn Marino   /* 255 */ {0.1250882898658681},
2914a238c70SJohn Marino   /* 256 */ {0.1250000000000000},
2924a238c70SJohn Marino };
2934a238c70SJohn Marino 
2944a238c70SJohn Marino void
mpfr_assert_fail(const char * filename,int linenum,const char * expr)2954a238c70SJohn Marino mpfr_assert_fail (const char *filename, int linenum,
2964a238c70SJohn Marino                      const char *expr)
2974a238c70SJohn Marino {
2984a238c70SJohn Marino   if (filename != NULL && filename[0] != '\0')
2994a238c70SJohn Marino     {
3004a238c70SJohn Marino       fprintf (stderr, "%s:", filename);
3014a238c70SJohn Marino       if (linenum != -1)
3024a238c70SJohn Marino         fprintf (stderr, "%d: ", linenum);
3034a238c70SJohn Marino     }
3044a238c70SJohn Marino   fprintf (stderr, "MPFR assertion failed: %s\n", expr);
3054a238c70SJohn Marino   abort();
3064a238c70SJohn Marino }
3074a238c70SJohn Marino 
3084a238c70SJohn Marino #ifdef mp_get_memory_functions
3094a238c70SJohn Marino 
3104a238c70SJohn Marino /* putting 0 as initial values forces those symbols to be fully defined,
3114a238c70SJohn Marino    and always resolved, otherwise they are only tentatively defined, which
3124a238c70SJohn Marino    leads to problems on e.g. MacOS, cf
3134a238c70SJohn Marino    http://lists.gforge.inria.fr/pipermail/mpc-discuss/2008-November/000048.html
3144a238c70SJohn Marino    and http://software.intel.com/en-us/articles/intelr-fortran-compiler-for-mac-os-non_lazy_ptr-unresolved-references-from-linking
3154a238c70SJohn Marino    Note that using ranlib -c or libtool -c is another fix.
3164a238c70SJohn Marino */
3174a238c70SJohn Marino void * (*mpfr_allocate_func) (size_t) = 0;
3184a238c70SJohn Marino void * (*mpfr_reallocate_func) (void *,size_t, size_t) = 0;
3194a238c70SJohn Marino void   (*mpfr_free_func) (void *, size_t) = 0;
3204a238c70SJohn Marino 
3214a238c70SJohn Marino #endif
3224a238c70SJohn Marino 
3234a238c70SJohn Marino void *
mpfr_default_allocate(size_t size)3244a238c70SJohn Marino mpfr_default_allocate (size_t size)
3254a238c70SJohn Marino {
3264a238c70SJohn Marino   void *ret;
3274a238c70SJohn Marino   ret = malloc (size);
3284a238c70SJohn Marino   if (ret == NULL)
3294a238c70SJohn Marino     {
3304a238c70SJohn Marino       fprintf (stderr, "MPFR: Can't allocate memory (size=%lu)\n",
3314a238c70SJohn Marino                (unsigned long) size);
3324a238c70SJohn Marino       abort ();
3334a238c70SJohn Marino     }
3344a238c70SJohn Marino   return ret;
3354a238c70SJohn Marino }
3364a238c70SJohn Marino 
3374a238c70SJohn Marino void *
mpfr_default_reallocate(void * oldptr,size_t old_size,size_t new_size)3384a238c70SJohn Marino mpfr_default_reallocate (void *oldptr, size_t old_size, size_t new_size)
3394a238c70SJohn Marino {
3404a238c70SJohn Marino   void *ret;
3414a238c70SJohn Marino   ret = realloc (oldptr, new_size);
3424a238c70SJohn Marino   if (ret == NULL)
3434a238c70SJohn Marino     {
3444a238c70SJohn Marino       fprintf (stderr,
3454a238c70SJohn Marino                "MPFR: Can't reallocate memory (old_size=%lu new_size=%lu)\n",
3464a238c70SJohn Marino                (unsigned long) old_size, (unsigned long) new_size);
3474a238c70SJohn Marino       abort ();
3484a238c70SJohn Marino     }
3494a238c70SJohn Marino   return ret;
3504a238c70SJohn Marino }
3514a238c70SJohn Marino 
3524a238c70SJohn Marino void
mpfr_default_free(void * blk_ptr,size_t blk_size)3534a238c70SJohn Marino mpfr_default_free (void *blk_ptr, size_t blk_size)
3544a238c70SJohn Marino {
3554a238c70SJohn Marino   free (blk_ptr);
3564a238c70SJohn Marino }
3574a238c70SJohn Marino 
3584a238c70SJohn Marino void *
mpfr_tmp_allocate(struct tmp_marker ** tmp_marker,size_t size)3594a238c70SJohn Marino mpfr_tmp_allocate (struct tmp_marker **tmp_marker, size_t size)
3604a238c70SJohn Marino {
3614a238c70SJohn Marino   struct tmp_marker *head;
3624a238c70SJohn Marino 
3634a238c70SJohn Marino   head = (struct tmp_marker *)
3644a238c70SJohn Marino     mpfr_default_allocate (sizeof (struct tmp_marker));
3654a238c70SJohn Marino   head->ptr = mpfr_default_allocate (size);
3664a238c70SJohn Marino   head->size = size;
3674a238c70SJohn Marino   head->next = *tmp_marker;
3684a238c70SJohn Marino   *tmp_marker = head;
3694a238c70SJohn Marino   return head->ptr;
3704a238c70SJohn Marino }
3714a238c70SJohn Marino 
3724a238c70SJohn Marino void
mpfr_tmp_free(struct tmp_marker * tmp_marker)3734a238c70SJohn Marino mpfr_tmp_free (struct tmp_marker *tmp_marker)
3744a238c70SJohn Marino {
3754a238c70SJohn Marino   struct tmp_marker *t;
3764a238c70SJohn Marino 
3774a238c70SJohn Marino   while (tmp_marker != NULL)
3784a238c70SJohn Marino     {
3794a238c70SJohn Marino       t = tmp_marker;
3804a238c70SJohn Marino       mpfr_default_free (t->ptr, t->size);
3814a238c70SJohn Marino       tmp_marker = t->next;
3824a238c70SJohn Marino       mpfr_default_free (t, sizeof (struct tmp_marker));
3834a238c70SJohn Marino     }
3844a238c70SJohn Marino }
3854a238c70SJohn Marino 
3864a238c70SJohn Marino #endif /* Have gmp-impl.h */
387