Moved from stdio to stdlib
authorroland <roland>
Tue, 21 Mar 1995 04:42:27 +0000 (04:42 +0000)
committerroland <roland>
Tue, 21 Mar 1995 04:42:27 +0000 (04:42 +0000)
12 files changed:
stdio/fpioconst.c [deleted file]
stdio/fpioconst.h [deleted file]
stdio/gmp-impl.h [deleted file]
stdio/gmp.h [deleted file]
stdio/longlong.h [deleted file]
stdio/mp_clz_tab.c [deleted file]
stdlib/fpioconst.c [new file with mode: 0644]
stdlib/fpioconst.h [new file with mode: 0644]
stdlib/gmp-impl.h [new file with mode: 0644]
stdlib/gmp.h [new file with mode: 0644]
stdlib/longlong.h [new file with mode: 0644]
stdlib/mp_clz_tab.c [new file with mode: 0644]

diff --git a/stdio/fpioconst.c b/stdio/fpioconst.c
deleted file mode 100644 (file)
index 8d0a823..0000000
+++ /dev/null
@@ -1,403 +0,0 @@
-/* Table of MP integer constants 10^(2^i), used for floating point <-> decimal.
-Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#include "fpioconst.h"
-#include <gmp-mparam.h>                /* This defines BITS_PER_MP_LIMB.  */
-
-/* First page  : 32-bit limbs
-   Second page : 64-bit limbs
-   Last page   : table of pointers
- */
-
-#if BITS_PER_MP_LIMB == 32
-
-/* Table with constants of 10^(2^i), i=0..12 for 32-bit limbs. */
-
-static const mp_limb _ten_p0[] =
-  { 0x00000000, 0x00000000, 0x0000000a };
-static const mp_limb _ten_p1[] =
-  { 0x00000000, 0x00000000, 0x00000064 };
-static const mp_limb _ten_p2[] =
-  { 0x00000000, 0x00000000, 0x00002710 };
-static const mp_limb _ten_p3[] =
-  { 0x00000000, 0x00000000, 0x05f5e100 };
-static const mp_limb _ten_p4[] =
-  { 0x00000000, 0x00000000, 0x6fc10000, 0x002386f2 };
-static const mp_limb _ten_p5[] =
-  { 0x00000000, 0x00000000, 0x00000000, 0x85acef81, 0x2d6d415b, 0x000004ee };
-static const mp_limb _ten_p6[] =
-  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbf6a1f01, 0x6e38ed64,
-    0xdaa797ed, 0xe93ff9f4, 0x00184f03 };
-static const mp_limb _ten_p7[] =
-  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x2e953e01, 0x03df9909, 0x0f1538fd, 0x2374e42f, 0xd3cff5ec, 0xc404dc08,
-    0xbccdb0da, 0xa6337f19, 0xe91f2603, 0x0000024e };
-static const mp_limb _ten_p8[] =
-  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x982e7c01, 0xbed3875b,
-    0xd8d99f72, 0x12152f87, 0x6bde50c6, 0xcf4a6e70, 0xd595d80f, 0x26b2716e,
-    0xadc666b0, 0x1d153624, 0x3c42d35a, 0x63ff540e, 0xcc5573c0, 0x65f9ef17,
-    0x55bc28f2, 0x80dcc7f7, 0xf46eeddc, 0x5fdcefce, 0x000553f7 };
-static const mp_limb _ten_p9[] =
-  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0xfc6cf801, 0x77f27267, 0x8f9546dc, 0x5d96976f, 0xb83a8a97, 0xc31e1ad9,
-    0x46c40513, 0x94e65747, 0xc88976c1, 0x4475b579, 0x28f8733b, 0xaa1da1bf,
-    0x703ed321, 0x1e25cfea, 0xb21a2f22, 0xbc51fb2e, 0x96e14f5d, 0xbfa3edac,
-    0x329c57ae, 0xe7fc7153, 0xc3fc0695, 0x85a91924, 0xf95f635e, 0xb2908ee0,
-    0x93abade4, 0x1366732a, 0x9449775c, 0x69be5b0e, 0x7343afac, 0xb099bc81,
-    0x45a71d46, 0xa2699748, 0x8cb07303, 0x8a0b1f13, 0x8cab8a97, 0xc1d238d9,
-    0x633415d4, 0x0000001c };
-static const mp_limb _ten_p10[] =
-  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2919f001, 0xf55b2b72,
-    0x6e7c215b, 0x1ec29f86, 0x991c4e87, 0x15c51a88, 0x140ac535, 0x4c7d1e1a,
-    0xcc2cd819, 0x0ed1440e, 0x896634ee, 0x7de16cfb, 0x1e43f61f, 0x9fce837d,
-    0x231d2b9c, 0x233e55c7, 0x65dc60d7, 0xf451218b, 0x1c5cd134, 0xc9635986,
-    0x922bbb9f, 0xa7e89431, 0x9f9f2a07, 0x62be695a, 0x8e1042c4, 0x045b7a74,
-    0x1abe1de3, 0x8ad822a5, 0xba34c411, 0xd814b505, 0xbf3fdeb3, 0x8fc51a16,
-    0xb1b896bc, 0xf56deeec, 0x31fb6bfd, 0xb6f4654b, 0x101a3616, 0x6b7595fb,
-    0xdc1a47fe, 0x80d98089, 0x80bda5a5, 0x9a202882, 0x31eb0f66, 0xfc8f1f90,
-    0x976a3310, 0xe26a7b7e, 0xdf68368a, 0x3ce3a0b8, 0x8e4262ce, 0x75a351a2,
-    0x6cb0b6c9, 0x44597583, 0x31b5653f, 0xc356e38a, 0x35faaba6, 0x0190fba0,
-    0x9fc4ed52, 0x88bc491b, 0x1640114a, 0x005b8041, 0xf4f3235e, 0x1e8d4649,
-    0x36a8de06, 0x73c55349, 0xa7e6bd2a, 0xc1a6970c, 0x47187094, 0xd2db49ef,
-    0x926c3f5b, 0xae6209d4, 0x2d433949, 0x34f4a3c6, 0xd4305d94, 0xd9d61a05,
-    0x00000325 };
-static const mp_limb _ten_p11[] =
-  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x1333e001, 0xe3096865, 0xb27d4d3f, 0x49e28dcf, 0xec2e4721, 0xee87e354,
-    0xb6067584, 0x368b8abb, 0xa5e5a191, 0x2ed56d55, 0xfd827773, 0xea50d142,
-    0x51b78db2, 0x98342c9e, 0xc850dabc, 0x866ed6f1, 0x19342c12, 0x92794987,
-    0xd2f869c2, 0x66912e4a, 0x71c7fd8f, 0x57a7842d, 0x235552eb, 0xfb7fedcc,
-    0xf3861ce0, 0x38209ce1, 0x9713b449, 0x34c10134, 0x8c6c54de, 0xa7a8289c,
-    0x2dbb6643, 0xe3cb64f3, 0x8074ff01, 0xe3892ee9, 0x10c17f94, 0xa8f16f92,
-    0xa8281ed6, 0x967abbb3, 0x5a151440, 0x9952fbed, 0x13b41e44, 0xafe609c3,
-    0xa2bca416, 0xf111821f, 0xfb1264b4, 0x91bac974, 0xd6c7d6ab, 0x8e48ff35,
-    0x4419bd43, 0xc4a65665, 0x685e5510, 0x33554c36, 0xab498697, 0x0dbd21fe,
-    0x3cfe491d, 0x982da466, 0xcbea4ca7, 0x9e110c7b, 0x79c56b8a, 0x5fc5a047,
-    0x84d80e2e, 0x1aa9f444, 0x730f203c, 0x6a57b1ab, 0xd752f7a6, 0x87a7dc62,
-    0x944545ff, 0x40660460, 0x77c1a42f, 0xc9ac375d, 0xe866d7ef, 0x744695f0,
-    0x81428c85, 0xa1fc6b96, 0xd7917c7b, 0x7bf03c19, 0x5b33eb41, 0x5715f791,
-    0x8f6cae5f, 0xdb0708fd, 0xb125ac8e, 0x785ce6b7, 0x56c6815b, 0x6f46eadb,
-    0x4eeebeee, 0x195355d8, 0xa244de3c, 0x9d7389c0, 0x53761abd, 0xcf99d019,
-    0xde9ec24b, 0x0d76ce39, 0x70beb181, 0x2e55ecee, 0xd5f86079, 0xf56d9d4b,
-    0xfb8886fb, 0x13ef5a83, 0x408f43c5, 0x3f3389a4, 0xfad37943, 0x58ccf45c,
-    0xf82df846, 0x415c7f3e, 0x2915e818, 0x8b3d5cf4, 0x6a445f27, 0xf8dbb57a,
-    0xca8f0070, 0x8ad803ec, 0xb2e87c34, 0x038f9245, 0xbedd8a6c, 0xc7c9dee0,
-    0x0eac7d56, 0x2ad3fa14, 0xe0de0840, 0xf775677c, 0xf1bd0ad5, 0x92be221e,
-    0x87fa1fb9, 0xce9d04a4, 0xd2c36fa9, 0x3f6f7024, 0xb028af62, 0x907855ee,
-    0xd83e49d6, 0x4efac5dc, 0xe7151aab, 0x77cd8c6b, 0x0a753b7d, 0x0af908b4,
-    0x8c983623, 0xe50f3027, 0x94222771, 0x1d08e2d6, 0xf7e928e6, 0xf2ee5ca6,
-    0x1b61b93c, 0x11eb962b, 0x9648b21c, 0xce2bcba1, 0x34f77154, 0x7bbebe30,
-    0xe526a319, 0x8ce329ac, 0xde4a74d2, 0xb5dc53d5, 0x0009e8b3 };
-static const mp_limb _ten_p12[] =
-  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
-    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a67c001, 0xd4724e8d,
-    0x8efe7ae7, 0xf89a1e90, 0xef084117, 0x54e05154, 0x13b1bb51, 0x506be829,
-    0xfb29b172, 0xe599574e, 0xf0da6146, 0x806c0ed3, 0xb86ae5be, 0x45155e93,
-    0xc0591cc2, 0x7e1e7c34, 0x7c4823da, 0x1d1f4cce, 0x9b8ba1e8, 0xd6bfdf75,
-    0xe341be10, 0xc2dfae78, 0x016b67b2, 0x0f237f1a, 0x3dbeabcd, 0xaf6a2574,
-    0xcab3e6d7, 0x142e0e80, 0x61959127, 0x2c234811, 0x87009701, 0xcb4bf982,
-    0xf8169c84, 0x88052f8c, 0x68dde6d4, 0xbc131761, 0xff0b0905, 0x54ab9c41,
-    0x7613b224, 0x1a1c304e, 0x3bfe167b, 0x441c2d47, 0x4f6cea9c, 0x78f06181,
-    0xeb659fb8, 0x30c7ae41, 0x947e0d0e, 0xa1ebcad7, 0xd97d9556, 0x2130504d,
-    0x1a8309cb, 0xf2acd507, 0x3f8ec72a, 0xfd82373a, 0x95a842bc, 0x280f4d32,
-    0xf3618ac0, 0x811a4f04, 0x6dc3a5b4, 0xd3967a1b, 0x15b8c898, 0xdcfe388f,
-    0x454eb2a0, 0x8738b909, 0x10c4e996, 0x2bd9cc11, 0x3297cd0c, 0x655fec30,
-    0xae0725b1, 0xf4090ee8, 0x037d19ee, 0x398c6fed, 0x3b9af26b, 0xc994a450,
-    0xb5341743, 0x75a697b2, 0xac50b9c1, 0x3ccb5b92, 0xffe06205, 0xa8329761,
-    0xdfea5242, 0xeb83cadb, 0xe79dadf7, 0x3c20ee69, 0x1e0a6817, 0x7021b97a,
-    0x743074fa, 0x176ca776, 0x77fb8af6, 0xeca19beb, 0x92baf1de, 0xaf63b712,
-    0xde35c88b, 0xa4eb8f8c, 0xe137d5e9, 0x40b464a0, 0x87d1cde8, 0x42923bbd,
-    0xcd8f62ff, 0x2e2690f3, 0x095edc16, 0x59c89f1b, 0x1fa8fd5d, 0x5138753d,
-    0x390a2b29, 0x80152f18, 0x2dd8d925, 0xf984d83e, 0x7a872e74, 0xc19e1faf,
-    0xed4d542d, 0xecf9b5d0, 0x9462ea75, 0xc53c0adf, 0x0caea134, 0x37a2d439,
-    0xc8fa2e8a, 0x2181327e, 0x6e7bb827, 0x2d240820, 0x50be10e0, 0x5893d4b8,
-    0xab312bb9, 0x1f2b2322, 0x440b3f25, 0xbf627ede, 0x72dac789, 0xb608b895,
-    0x78787e2a, 0x86deb3f0, 0x6fee7aab, 0xbb9373f4, 0x27ecf57b, 0xf7d8b57e,
-    0xfca26a9f, 0x3d04e8d2, 0xc9df13cb, 0x3172826a, 0xcd9e8d7c, 0xa8fcd8e0,
-    0xb2c39497, 0x307641d9, 0x1cc939c1, 0x2608c4cf, 0xb6d1c7bf, 0x3d326a7e,
-    0xeeaf19e6, 0x8e13e25f, 0xee63302b, 0x2dfe6d97, 0x25971d58, 0xe41d3cc4,
-    0x0a80627c, 0xab8db59a, 0x9eea37c8, 0xe90afb77, 0x90ca19cf, 0x9ee3352c,
-    0x3613c850, 0xfe78d682, 0x788f6e50, 0x5b060904, 0xb71bd1a4, 0x3fecb534,
-    0xb32c450c, 0x20c33857, 0xa6e9cfda, 0x0239f4ce, 0x48497187, 0xa19adb95,
-    0xb492ed8a, 0x95aca6a8, 0x4dcd6cd9, 0xcf1b2350, 0xfbe8b12a, 0x1a67778c,
-    0x38eb3acc, 0xc32da383, 0xfb126ab1, 0xa03f40a8, 0xed5bf546, 0xe9ce4724,
-    0x4c4a74fd, 0x73a130d8, 0xd9960e2d, 0xa2ebd6c1, 0x94ab6feb, 0x6f233b7c,
-    0x49126080, 0x8e7b9a73, 0x4b8c9091, 0xd298f999, 0x35e836b5, 0xa96ddeff,
-    0x96119b31, 0x6b0dd9bc, 0xc6cc3f8d, 0x282566fb, 0x72b882e7, 0xd6769f3b,
-    0xa674343d, 0x00fc509b, 0xdcbf7789, 0xd6266a3f, 0xae9641fd, 0x4e89541b,
-    0x11953407, 0x53400d03, 0x8e0dd75a, 0xe5b53345, 0x108f19ad, 0x108b89bc,
-    0x41a4c954, 0xe03b2b63, 0x437b3d7f, 0x97aced8e, 0xcbd66670, 0x2c5508c2,
-    0x650ebc69, 0x5c4f2ef0, 0x904ff6bf, 0x9985a2df, 0x9faddd9e, 0x5ed8d239,
-    0x25585832, 0xe3e51cb9, 0x0ff4f1d4, 0x56c02d9a, 0x8c4ef804, 0xc1a08a13,
-    0x13fd01c8, 0xe6d27671, 0xa7c234f4, 0x9d0176cc, 0xd0d73df2, 0x4d8bfa89,
-    0x544f10cd, 0x2b17e0b2, 0xb70a5c7d, 0xfd86fe49, 0xdf373f41, 0x214495bb,
-    0x84e857fd, 0x00d313d5, 0x0496fcbe, 0xa4ba4744, 0xe8cac982, 0xaec29e6e,
-    0x87ec7038, 0x7000a519, 0xaeee333b, 0xff66e42c, 0x8afd6b25, 0x03b4f63b,
-    0xbd7991dc, 0x5ab8d9c7, 0x2ed4684e, 0x48741a6c, 0xaf06940d, 0x2fdc6349,
-    0xb03d7ecd, 0xe974996f, 0xac7867f9, 0x52ec8721, 0xbcdd9d4a, 0x8edd2d00,
-    0x3557de06, 0x41c759f8, 0x3956d4b9, 0xa75409f2, 0x123cd8a1, 0xb6100fab,
-    0x3e7b21e2, 0x2e8d623b, 0x92959da2, 0xbca35f77, 0x200c03a5, 0x35fcb457,
-    0x1bb6c6e4, 0xf74eb928, 0x3d5d0b54, 0x87cc1d21, 0x4964046f, 0x18ae4240,
-    0xd868b275, 0x8bd2b496, 0x1c5563f4, 0xc234d8f5, 0xf868e970, 0xf9151fff,
-    0xae7be4a2, 0x271133ee, 0xbb0fd922, 0x25254932, 0xa60a9fc0, 0x104bcd64,
-    0x30290145, 0x00000062 };
-
-/* This value is the index of the last array element.  */
-#define _LAST_POW10    12
-\f
-#elif BITS_PER_MP_LIMB == 64
-
-/* Table with constants of 10^(2^i), i=0..12 for 64-bit limbs. */
-
-static const mp_limb _ten_p0[] =
-  { 0x0000000000000000, 0x000000000000000a };
-static const mp_limb _ten_p1[] =
-  { 0x0000000000000000, 0x0000000000000064 };
-static const mp_limb _ten_p2[] =
-  { 0x0000000000000000, 0x0000000000002710 };
-static const mp_limb _ten_p3[] =
-  { 0x0000000000000000, 0x0000000005f5e100 };
-static const mp_limb _ten_p4[] =
-  { 0x0000000000000000, 0x002386f26fc10000 };
-static const mp_limb _ten_p5[] =
-  { 0x0000000000000000, 0x85acef8100000000, 0x000004ee2d6d415b };
-static const mp_limb _ten_p6[] =
-  { 0x0000000000000000, 0x0000000000000000, 0x6e38ed64bf6a1f01,
-    0xe93ff9f4daa797ed, 0x0000000000184f03 };
-static const mp_limb _ten_p7[] =
-  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x03df99092e953e01, 0x2374e42f0f1538fd, 0xc404dc08d3cff5ec,
-    0xa6337f19bccdb0da, 0x0000024ee91f2603 };
-static const mp_limb _ten_p8[] =
-  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0xbed3875b982e7c01,
-    0x12152f87d8d99f72, 0xcf4a6e706bde50c6, 0x26b2716ed595d80f,
-    0x1d153624adc666b0, 0x63ff540e3c42d35a, 0x65f9ef17cc5573c0,
-    0x80dcc7f755bc28f2, 0x5fdcefcef46eeddc, 0x00000000000553f7 };
-static const mp_limb _ten_p9[] =
-  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x77f27267fc6cf801, 0x5d96976f8f9546dc, 0xc31e1ad9b83a8a97,
-    0x94e6574746c40513, 0x4475b579c88976c1, 0xaa1da1bf28f8733b,
-    0x1e25cfea703ed321, 0xbc51fb2eb21a2f22, 0xbfa3edac96e14f5d,
-    0xe7fc7153329c57ae, 0x85a91924c3fc0695, 0xb2908ee0f95f635e,
-    0x1366732a93abade4, 0x69be5b0e9449775c, 0xb099bc817343afac,
-    0xa269974845a71d46, 0x8a0b1f138cb07303, 0xc1d238d98cab8a97,
-    0x0000001c633415d4 };
-static const mp_limb _ten_p10[] =
-  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0xf55b2b722919f001,
-    0x1ec29f866e7c215b, 0x15c51a88991c4e87, 0x4c7d1e1a140ac535,
-    0x0ed1440ecc2cd819, 0x7de16cfb896634ee, 0x9fce837d1e43f61f,
-    0x233e55c7231d2b9c, 0xf451218b65dc60d7, 0xc96359861c5cd134,
-    0xa7e89431922bbb9f, 0x62be695a9f9f2a07, 0x045b7a748e1042c4,
-    0x8ad822a51abe1de3, 0xd814b505ba34c411, 0x8fc51a16bf3fdeb3,
-    0xf56deeecb1b896bc, 0xb6f4654b31fb6bfd, 0x6b7595fb101a3616,
-    0x80d98089dc1a47fe, 0x9a20288280bda5a5, 0xfc8f1f9031eb0f66,
-    0xe26a7b7e976a3310, 0x3ce3a0b8df68368a, 0x75a351a28e4262ce,
-    0x445975836cb0b6c9, 0xc356e38a31b5653f, 0x0190fba035faaba6,
-    0x88bc491b9fc4ed52, 0x005b80411640114a, 0x1e8d4649f4f3235e,
-    0x73c5534936a8de06, 0xc1a6970ca7e6bd2a, 0xd2db49ef47187094,
-    0xae6209d4926c3f5b, 0x34f4a3c62d433949, 0xd9d61a05d4305d94,
-    0x0000000000000325 };
-static const mp_limb _ten_p11[] =
-  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0xe30968651333e001, 0x49e28dcfb27d4d3f, 0xee87e354ec2e4721,
-    0x368b8abbb6067584, 0x2ed56d55a5e5a191, 0xea50d142fd827773,
-    0x98342c9e51b78db2, 0x866ed6f1c850dabc, 0x9279498719342c12,
-    0x66912e4ad2f869c2, 0x57a7842d71c7fd8f, 0xfb7fedcc235552eb,
-    0x38209ce1f3861ce0, 0x34c101349713b449, 0xa7a8289c8c6c54de,
-    0xe3cb64f32dbb6643, 0xe3892ee98074ff01, 0xa8f16f9210c17f94,
-    0x967abbb3a8281ed6, 0x9952fbed5a151440, 0xafe609c313b41e44,
-    0xf111821fa2bca416, 0x91bac974fb1264b4, 0x8e48ff35d6c7d6ab,
-    0xc4a656654419bd43, 0x33554c36685e5510, 0x0dbd21feab498697,
-    0x982da4663cfe491d, 0x9e110c7bcbea4ca7, 0x5fc5a04779c56b8a,
-    0x1aa9f44484d80e2e, 0x6a57b1ab730f203c, 0x87a7dc62d752f7a6,
-    0x40660460944545ff, 0xc9ac375d77c1a42f, 0x744695f0e866d7ef,
-    0xa1fc6b9681428c85, 0x7bf03c19d7917c7b, 0x5715f7915b33eb41,
-    0xdb0708fd8f6cae5f, 0x785ce6b7b125ac8e, 0x6f46eadb56c6815b,
-    0x195355d84eeebeee, 0x9d7389c0a244de3c, 0xcf99d01953761abd,
-    0x0d76ce39de9ec24b, 0x2e55ecee70beb181, 0xf56d9d4bd5f86079,
-    0x13ef5a83fb8886fb, 0x3f3389a4408f43c5, 0x58ccf45cfad37943,
-    0x415c7f3ef82df846, 0x8b3d5cf42915e818, 0xf8dbb57a6a445f27,
-    0x8ad803ecca8f0070, 0x038f9245b2e87c34, 0xc7c9dee0bedd8a6c,
-    0x2ad3fa140eac7d56, 0xf775677ce0de0840, 0x92be221ef1bd0ad5,
-    0xce9d04a487fa1fb9, 0x3f6f7024d2c36fa9, 0x907855eeb028af62,
-    0x4efac5dcd83e49d6, 0x77cd8c6be7151aab, 0x0af908b40a753b7d,
-    0xe50f30278c983623, 0x1d08e2d694222771, 0xf2ee5ca6f7e928e6,
-    0x11eb962b1b61b93c, 0xce2bcba19648b21c, 0x7bbebe3034f77154,
-    0x8ce329ace526a319, 0xb5dc53d5de4a74d2, 0x000000000009e8b3 };
-static const mp_limb _ten_p12[] =
-  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
-    0x0000000000000000, 0x0000000000000000, 0xd4724e8d2a67c001,
-    0xf89a1e908efe7ae7, 0x54e05154ef084117, 0x506be82913b1bb51,
-    0xe599574efb29b172, 0x806c0ed3f0da6146, 0x45155e93b86ae5be,
-    0x7e1e7c34c0591cc2, 0x1d1f4cce7c4823da, 0xd6bfdf759b8ba1e8,
-    0xc2dfae78e341be10, 0x0f237f1a016b67b2, 0xaf6a25743dbeabcd,
-    0x142e0e80cab3e6d7, 0x2c23481161959127, 0xcb4bf98287009701,
-    0x88052f8cf8169c84, 0xbc13176168dde6d4, 0x54ab9c41ff0b0905,
-    0x1a1c304e7613b224, 0x441c2d473bfe167b, 0x78f061814f6cea9c,
-    0x30c7ae41eb659fb8, 0xa1ebcad7947e0d0e, 0x2130504dd97d9556,
-    0xf2acd5071a8309cb, 0xfd82373a3f8ec72a, 0x280f4d3295a842bc,
-    0x811a4f04f3618ac0, 0xd3967a1b6dc3a5b4, 0xdcfe388f15b8c898,
-    0x8738b909454eb2a0, 0x2bd9cc1110c4e996, 0x655fec303297cd0c,
-    0xf4090ee8ae0725b1, 0x398c6fed037d19ee, 0xc994a4503b9af26b,
-    0x75a697b2b5341743, 0x3ccb5b92ac50b9c1, 0xa8329761ffe06205,
-    0xeb83cadbdfea5242, 0x3c20ee69e79dadf7, 0x7021b97a1e0a6817,
-    0x176ca776743074fa, 0xeca19beb77fb8af6, 0xaf63b71292baf1de,
-    0xa4eb8f8cde35c88b, 0x40b464a0e137d5e9, 0x42923bbd87d1cde8,
-    0x2e2690f3cd8f62ff, 0x59c89f1b095edc16, 0x5138753d1fa8fd5d,
-    0x80152f18390a2b29, 0xf984d83e2dd8d925, 0xc19e1faf7a872e74,
-    0xecf9b5d0ed4d542d, 0xc53c0adf9462ea75, 0x37a2d4390caea134,
-    0x2181327ec8fa2e8a, 0x2d2408206e7bb827, 0x5893d4b850be10e0,
-    0x1f2b2322ab312bb9, 0xbf627ede440b3f25, 0xb608b89572dac789,
-    0x86deb3f078787e2a, 0xbb9373f46fee7aab, 0xf7d8b57e27ecf57b,
-    0x3d04e8d2fca26a9f, 0x3172826ac9df13cb, 0xa8fcd8e0cd9e8d7c,
-    0x307641d9b2c39497, 0x2608c4cf1cc939c1, 0x3d326a7eb6d1c7bf,
-    0x8e13e25feeaf19e6, 0x2dfe6d97ee63302b, 0xe41d3cc425971d58,
-    0xab8db59a0a80627c, 0xe90afb779eea37c8, 0x9ee3352c90ca19cf,
-    0xfe78d6823613c850, 0x5b060904788f6e50, 0x3fecb534b71bd1a4,
-    0x20c33857b32c450c, 0x0239f4cea6e9cfda, 0xa19adb9548497187,
-    0x95aca6a8b492ed8a, 0xcf1b23504dcd6cd9, 0x1a67778cfbe8b12a,
-    0xc32da38338eb3acc, 0xa03f40a8fb126ab1, 0xe9ce4724ed5bf546,
-    0x73a130d84c4a74fd, 0xa2ebd6c1d9960e2d, 0x6f233b7c94ab6feb,
-    0x8e7b9a7349126080, 0xd298f9994b8c9091, 0xa96ddeff35e836b5,
-    0x6b0dd9bc96119b31, 0x282566fbc6cc3f8d, 0xd6769f3b72b882e7,
-    0x00fc509ba674343d, 0xd6266a3fdcbf7789, 0x4e89541bae9641fd,
-    0x53400d0311953407, 0xe5b533458e0dd75a, 0x108b89bc108f19ad,
-    0xe03b2b6341a4c954, 0x97aced8e437b3d7f, 0x2c5508c2cbd66670,
-    0x5c4f2ef0650ebc69, 0x9985a2df904ff6bf, 0x5ed8d2399faddd9e,
-    0xe3e51cb925585832, 0x56c02d9a0ff4f1d4, 0xc1a08a138c4ef804,
-    0xe6d2767113fd01c8, 0x9d0176cca7c234f4, 0x4d8bfa89d0d73df2,
-    0x2b17e0b2544f10cd, 0xfd86fe49b70a5c7d, 0x214495bbdf373f41,
-    0x00d313d584e857fd, 0xa4ba47440496fcbe, 0xaec29e6ee8cac982,
-    0x7000a51987ec7038, 0xff66e42caeee333b, 0x03b4f63b8afd6b25,
-    0x5ab8d9c7bd7991dc, 0x48741a6c2ed4684e, 0x2fdc6349af06940d,
-    0xe974996fb03d7ecd, 0x52ec8721ac7867f9, 0x8edd2d00bcdd9d4a,
-    0x41c759f83557de06, 0xa75409f23956d4b9, 0xb6100fab123cd8a1,
-    0x2e8d623b3e7b21e2, 0xbca35f7792959da2, 0x35fcb457200c03a5,
-    0xf74eb9281bb6c6e4, 0x87cc1d213d5d0b54, 0x18ae42404964046f,
-    0x8bd2b496d868b275, 0xc234d8f51c5563f4, 0xf9151ffff868e970,
-    0x271133eeae7be4a2, 0x25254932bb0fd922, 0x104bcd64a60a9fc0,
-    0x0000006230290145 };
-
-/* This value is the index of the last array element.  */
-#define _LAST_POW10    12
-\f
-#else
-#  error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
-#endif
-
-
-/* Each of array variable above defines one mpn integer which is a power of 10.
-   This table points to those variables, indexed by the exponent.  */
-
-const struct mp_power _fpioconst_pow10[_LAST_POW10 + 1] =
-  {
-    { _ten_p0, sizeof (_ten_p0) / sizeof (_ten_p0[0]),         4,           },
-    { _ten_p1, sizeof (_ten_p1) / sizeof (_ten_p1[0]),         7,         4 },
-    { _ten_p2, sizeof (_ten_p2) / sizeof (_ten_p2[0]),         14,       10 },
-    { _ten_p3, sizeof (_ten_p3) / sizeof (_ten_p3[0]),         27,       24 },
-    { _ten_p4, sizeof (_ten_p4) / sizeof (_ten_p4[0]),         54,       50 },
-    { _ten_p5, sizeof (_ten_p5) / sizeof (_ten_p5[0]),         107,     103 },
-    { _ten_p6, sizeof (_ten_p6) / sizeof (_ten_p6[0]),         213,     210 },
-    { _ten_p7, sizeof (_ten_p7) / sizeof (_ten_p7[0]),         426,     422 },
-    { _ten_p8, sizeof (_ten_p8) / sizeof (_ten_p8[0]),         851,     848 },
-    { _ten_p9, sizeof (_ten_p9) / sizeof (_ten_p9[0]),         1701,   1698 },
-    { _ten_p10, sizeof (_ten_p10) / sizeof (_ten_p10[0]),      3402,   3399 },
-    { _ten_p11, sizeof (_ten_p11) / sizeof (_ten_p11[0]),      6804,   6800 },
-    { _ten_p12, sizeof (_ten_p12) / sizeof (_ten_p12[0]),      13607, 13604 }
-  };
-
-#if LAST_POW10 > _LAST_POW10
-#error "Need to expand 10^(2^i) table for i up to" LAST_POW10
-#endif
diff --git a/stdio/fpioconst.h b/stdio/fpioconst.h
deleted file mode 100644 (file)
index 8edbdcc..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-/* Header file for constants used in floating point <-> decimal conversions.
-Copyright (C) 1995 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA.  */
-
-#ifndef _FPIOCONST_H
-#define        _FPIOCONST_H
-
-#include <float.h>
-#include "gmp.h"
-
-
-/* These values are used by __printf_fp, where they are noncritical (if the
-   value is not large enough, it will just be slower); and by
-   strtof/strtod/strtold, where it is critical (it's used for overflow
-   detection).
-
-   XXX These should be defined in <float.h>.  For the time being, we have the
-   IEEE754 values here.  */
-
-#define LDBL_MAX_10_EXP_LOG    12 /* = floor(log_2(LDBL_MAX_10_EXP)) */
-#define DBL_MAX_10_EXP_LOG     8 /* = floor(log_2(DBL_MAX_10_EXP)) */
-#define FLT_MAX_10_EXP_LOG     5 /* = floor(log_2(FLT_MAX_10_EXP)) */
-
-
-/* Table of powers of ten.  This is used by __printf_fp and by
-   strtof/strtod/strtold.  */
-struct mp_power
-  {
-    const mp_limb *array;      /* The array with the number representation. */
-    mp_size_t arraysize;       /* Size of the array.  */
-    int p_expo;                        /* Exponent of the number 10^(2^i).  */
-    int m_expo;                        /* Exponent of the number 10^-(2^i-1).  */
-  };
-extern const struct mp_power _fpioconst_pow10[LDBL_MAX_10_EXP_LOG + 1];
-
-
-#endif /* fpioconst.h */
diff --git a/stdio/gmp-impl.h b/stdio/gmp-impl.h
deleted file mode 100644 (file)
index ccffe7b..0000000
+++ /dev/null
@@ -1,283 +0,0 @@
-/* Include file for internal GNU MP types and definitions.
-
-Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if ! defined (alloca)
-#if defined (__GNUC__) || defined (__sparc__) || defined (sparc)
-#define alloca __builtin_alloca
-#endif
-#endif
-
-#ifndef NULL
-#define NULL 0L
-#endif
-
-#if ! defined (__GNUC__)
-#define inline                 /* Empty */
-void *alloca();
-#endif
-
-#define ABS(x) (x >= 0 ? x : -x)
-#define MIN(l,o) ((l) < (o) ? (l) : (o))
-#define MAX(h,i) ((h) > (i) ? (h) : (i))
-
-#include "gmp-mparam.h"
-/* #include "longlong.h" */
-
-#ifdef __STDC__
-void *malloc (size_t);
-void *realloc (void *, size_t);
-void free (void *);
-
-extern void *  (*_mp_allocate_func) (size_t);
-extern void *  (*_mp_reallocate_func) (void *, size_t, size_t);
-extern void    (*_mp_free_func) (void *, size_t);
-
-void *_mp_default_allocate (size_t);
-void *_mp_default_reallocate (void *, size_t, size_t);
-void _mp_default_free (void *, size_t);
-
-#else
-
-#define const                  /* Empty */
-#define signed                 /* Empty */
-
-void *malloc ();
-void *realloc ();
-void free ();
-
-extern void *  (*_mp_allocate_func) ();
-extern void *  (*_mp_reallocate_func) ();
-extern void    (*_mp_free_func) ();
-
-void *_mp_default_allocate ();
-void *_mp_default_reallocate ();
-void _mp_default_free ();
-#endif
-
-/* Copy NLIMBS *limbs* from SRC to DST.  */
-#define MPN_COPY_INCR(DST, SRC, NLIMBS) \
-  do {                                                                 \
-    mp_size_t __i;                                                     \
-    for (__i = 0; __i < (NLIMBS); __i++)                               \
-      (DST)[__i] = (SRC)[__i];                                         \
-  } while (0)
-#define MPN_COPY_DECR(DST, SRC, NLIMBS) \
-  do {                                                                 \
-    mp_size_t __i;                                                     \
-    for (__i = (NLIMBS) - 1; __i >= 0; __i--)                          \
-      (DST)[__i] = (SRC)[__i];                                         \
-  } while (0)
-#define MPN_COPY MPN_COPY_INCR
-
-/* Zero NLIMBS *limbs* AT DST.  */
-#define MPN_ZERO(DST, NLIMBS) \
-  do {                                                                 \
-    mp_size_t __i;                                                     \
-    for (__i = 0; __i < (NLIMBS); __i++)                               \
-      (DST)[__i] = 0;                                                  \
-  } while (0)
-
-#define MPN_NORMALIZE(DST, NLIMBS) \
-  do {                                                                 \
-    while (NLIMBS > 0)                                                 \
-      {                                                                        \
-       if ((DST)[(NLIMBS) - 1] != 0)                                   \
-         break;                                                        \
-       NLIMBS--;                                                       \
-      }                                                                        \
-  } while (0)
-#define MPN_NORMALIZE_NOT_ZERO(DST, NLIMBS) \
-  do {                                                                 \
-    while (1)                                                          \
-      {                                                                        \
-       if ((DST)[(NLIMBS) - 1] != 0)                                   \
-         break;                                                        \
-       NLIMBS--;                                                       \
-      }                                                                        \
-  } while (0)
-
-/*  Swap (mp_ptr, mp_size_t) (U, UL) with (V, VL)  */
-#define MPN_SWAP(u, l, v, m) \
-  do {                                                                 \
-    { mp_ptr _; _ = (u), (u) = (v), (v) = _;}                          \
-    { mp_size_t _; _ = (l), (l) = (m), (m) = _;}                       \
-  } while (0)
-
-/*  Return true iff the limb X has less bits than the limb Y.  */
-#define MPN_LESS_BITS_LIMB(x,y) ((x) < (y) && (x) < ((x) ^ (y)))
-
-/*  Return true iff (mp_ptr, mp_size_t) (U, UL) has less bits than (V, VL).  */
-#define MPN_LESS_BITS(u, l, v, m) \
-  ((l) < (m)                                                           \
-   || ((l) == (m) && (l) != 0 && MPN_LESS_BITS_LIMB ((u)[(l - 1)], (v)[(l) - 1])))
-
-/*  Return true iff (mp_ptr, mp_size_t) (U, UL) has more bits than (V, VL).  */
-#define MPN_MORE_BITS(u, l, v, m) MPN_LESS_BITS (v, m, u, l)
-
-/*  Perform twos complement on (mp_ptr, mp_size_t) (U, UL), 
-    putting result at (v, VL).  Precondition: U[0] != 0.  */
-#define MPN_COMPL_INCR(u, v, l)        \
-  do {                                                                 \
-    mp_size_t _ = 0;                                                   \
-    (u)[0] = -(v)[_];                                                  \
-    while (_++ < (l))                                                  \
-      (u)[_] = ~(v)[_];                                                        \
-  } while (0)
-#define MPN_COMPL MPN_COMPL_INCR
-
-/* Initialize the MP_INT X with space for NLIMBS limbs.
-   X should be a temporary variable, and it will be automatically
-   cleared out when the running function returns.
-   We use __x here to make it possible to accept both mpz_ptr and mpz_t
-   arguments.  */
-#define MPZ_TMP_INIT(X, NLIMBS) \
-  do {                                                                 \
-    mpz_ptr __x = (X);                                                 \
-    __x->alloc = (NLIMBS);                                             \
-    __x->d = (mp_ptr) alloca ((NLIMBS) * BYTES_PER_MP_LIMB);           \
-  } while (0)
-
-#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
-  do {                                                                 \
-    if ((size) < KARATSUBA_THRESHOLD)                                  \
-      ____mpn_mul_n_basecase (prodp, up, vp, size);                    \
-    else                                                               \
-      ____mpn_mul_n (prodp, up, vp, size, tspace);                     \
-  } while (0);
-#define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \
-  do {                                                                 \
-    if ((size) < KARATSUBA_THRESHOLD)                                  \
-      ____mpn_sqr_n_basecase (prodp, up, size);                                \
-    else                                                               \
-      ____mpn_sqr_n (prodp, up, size, tspace);                         \
-  } while (0);
-
-/* Structure for conversion between internal binary format and
-   strings in base 2..36.  */
-struct bases
-{
-  /* Number of digits in the conversion base that always fits in
-     an mp_limb.  For example, for base 10 this is 10, since
-     2**32 = 4294967296 has ten digits.  */
-  int chars_per_limb;
-
-  /* log(2)/log(conversion_base) */
-  float chars_per_bit_exactly;
-
-  /* big_base is conversion_base**chars_per_limb, i.e. the biggest
-     number that fits a word, built by factors of conversion_base.
-     Exception: For 2, 4, 8, etc, big_base is log2(base), i.e. the
-     number of bits used to represent each digit in the base.  */
-  mp_limb big_base;
-
-  /* big_base_inverted is a BITS_PER_MP_LIMB bit approximation to
-     1/big_base, represented as a fixed-point number.  Instead of
-     dividing by big_base an application can choose to multiply
-     by big_base_inverted.  */
-  mp_limb big_base_inverted;
-};
-
-extern const struct bases __mp_bases[];
-extern mp_size_t __gmp_default_fp_limb_precision;
-
-/* Divide the two-limb number in (NH,,NL) by D, with DI being a 32 bit
-   approximation to (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB).
-   Put the quotient in Q and the remainder in R.  */
-#define udiv_qrnnd_preinv(q, r, nh, nl, d, di) \
-  do {                                                                 \
-    mp_limb _q, _ql, _r;                                               \
-    mp_limb _xh, _xl;                                                  \
-    umul_ppmm (_q, _ql, (nh), (di));                                   \
-    _q += (nh);                        /* DI is 2**BITS_PER_MP_LIMB too small */\
-    umul_ppmm (_xh, _xl, _q, (d));                                     \
-    sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl);                                \
-    if (_xh != 0)                                                      \
-      {                                                                        \
-       sub_ddmmss (_xh, _r, _xh, _r, 0, (d));                          \
-       _q += 1;                                                        \
-       if (_xh != 0)                                                   \
-         {                                                             \
-           sub_ddmmss (_xh, _r, _xh, _r, 0, (d));                      \
-           _q += 1;                                                    \
-         }                                                             \
-      }                                                                        \
-    if (_r >= (d))                                                     \
-      {                                                                        \
-       _r -= (d);                                                      \
-       _q += 1;                                                        \
-      }                                                                        \
-    (r) = _r;                                                          \
-    (q) = _q;                                                          \
-  } while (0)
-#define udiv_qrnnd_preinv2gen(q, r, nh, nl, d, di, dnorm, lgup) \
-  do {                                                                 \
-    mp_limb n2, n10, n1, nadj, q1;                                     \
-    mp_limb _xh, _xl;                                                  \
-    n2 = ((nh) << (BITS_PER_MP_LIMB - (lgup))) + ((nl) >> 1 >> (l - 1));\
-    n10 = (nl) << (BITS_PER_MP_LIMB - (lgup));                         \
-    n1 = ((mp_limb_signed) n10 >> (BITS_PER_MP_LIMB - 1));             \
-    nadj = n10 + (n1 & (dnorm));                                       \
-    umul_ppmm (_xh, _xl, di, n2 - n1);                                 \
-    add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj);                          \
-    q1 = ~(n2 + _xh);                                                  \
-    umul_ppmm (_xh, _xl, q1, d);                                       \
-    add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl);                           \
-    _xh -= (d);                                                                \
-    (r) = _xl + ((d) & _xh);                                           \
-    (q) = _xh - q1;                                                    \
-  } while (0)
-#define udiv_qrnnd_preinv2norm(q, r, nh, nl, d, di) \
-  do {                                                                 \
-    mp_limb n2, n10, n1, nadj, q1;                                     \
-    mp_limb _xh, _xl;                                                  \
-    n2 = (nh);                                                         \
-    n10 = (nl);                                                                \
-    n1 = ((mp_limb_signed) n10 >> (BITS_PER_MP_LIMB - 1));             \
-    nadj = n10 + (n1 & (d));                                           \
-    umul_ppmm (_xh, _xl, di, n2 - n1);                                 \
-    add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj);                          \
-    q1 = ~(n2 + _xh);                                                  \
-    umul_ppmm (_xh, _xl, q1, d);                                       \
-    add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl);                           \
-    _xh -= (d);                                                                \
-    (r) = _xl + ((d) & _xh);                                           \
-    (q) = _xh - q1;                                                    \
-  } while (0)
-
-#if defined (__GNUC__)
-/* Define stuff for longlong.h asm macros.  */
-#if __GNUC_NEW_ATTR_MODE_SYNTAX
-typedef unsigned int UQItype   __attribute__ ((mode ("QI")));
-typedef         int SItype     __attribute__ ((mode ("SI")));
-typedef unsigned int USItype   __attribute__ ((mode ("SI")));
-typedef                 int DItype     __attribute__ ((mode ("DI")));
-typedef unsigned int UDItype   __attribute__ ((mode ("DI")));
-#else
-typedef unsigned int UQItype   __attribute__ ((mode (QI)));
-typedef         int SItype     __attribute__ ((mode (SI)));
-typedef unsigned int USItype   __attribute__ ((mode (SI)));
-typedef                 int DItype     __attribute__ ((mode (DI)));
-typedef unsigned int UDItype   __attribute__ ((mode (DI)));
-#endif
-#endif
-
-typedef mp_limb UWtype;
-typedef unsigned int UHWtype;
-#define W_TYPE_SIZE BITS_PER_MP_LIMB
diff --git a/stdio/gmp.h b/stdio/gmp.h
deleted file mode 100644 (file)
index 95c2f1b..0000000
+++ /dev/null
@@ -1,525 +0,0 @@
-/* gmp.h -- Definitions for GNU multiple precision functions.
-
-Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifndef __GMP_H__
-
-#ifndef __GNU_MP__
-#define __need_size_t
-#include <stddef.h>
-
-#ifdef __STDC__
-#define __gmp_const const
-#else
-#define __gmp_const
-#endif
-
-#ifdef __GNUC__
-#define __gmp_inline inline
-#else
-#define __gmp_inline
-#endif
-
-#ifdef _SHORT_LIMB
-typedef unsigned int           mp_limb;
-typedef int                    mp_limb_signed;
-#else
-typedef unsigned long int      mp_limb;
-typedef long int               mp_limb_signed;
-#endif
-
-typedef mp_limb *              mp_ptr;
-typedef __gmp_const mp_limb *  mp_srcptr;
-typedef int                    mp_size_t;
-typedef long int               mp_exp_t;
-
-#ifndef __MP_SMALL__
-typedef struct
-{
-  long int alloc;              /* Number of *limbs* allocated and pointed
-                                  to by the D field.  */
-  long int size;               /* abs(SIZE) is the number of limbs
-                                  the last field points to.  If SIZE
-                                  is negative this is a negative
-                                  number.  */
-  mp_limb *d;                  /* Pointer to the limbs.  */
-} __mpz_struct;
-#else
-typedef struct
-{
-  short int alloc;             /* Number of *limbs* allocated and pointed
-                                  to by the D field.  */
-  short int size;              /* abs(SIZE) is the number of limbs
-                                  the last field points to.  If SIZE
-                                  is negative this is a negative
-                                  number.  */
-  mp_limb *d;                  /* Pointer to the limbs.  */
-} __mpz_struct;
-#endif
-#endif /* __GNU_MP__ */
-
-/* User-visible types.  */
-typedef __mpz_struct MP_INT;
-typedef __mpz_struct mpz_t[1];
-
-/* Structure for rational numbers.  Zero is represented as 0/any, i.e.
-   the denominator is ignored.  Negative numbers have the sign in
-   the numerator.  */
-typedef struct
-{
-  __mpz_struct num;
-  __mpz_struct den;
-#if 0
-  long int num_alloc;          /* Number of limbs allocated
-                                  for the numerator.  */
-  long int num_size;           /* The absolute value of this field is the
-                                  length of the numerator; the sign is the
-                                  sign of the entire rational number.  */
-  mp_ptr num;                  /* Pointer to the numerator limbs.  */
-  long int den_alloc;          /* Number of limbs allocated
-                                  for the denominator.  */
-  long int den_size;           /* Length of the denominator.  (This field
-                                  should always be positive.) */
-  mp_ptr den;                  /* Pointer to the denominator limbs.  */
-#endif
-} __mpq_struct;
-
-typedef __mpq_struct MP_RAT;
-typedef __mpq_struct mpq_t[1];
-
-typedef struct
-{
-  mp_size_t alloc;             /* Number of *limbs* allocated and pointed
-                                  to by the D field.  */
-  mp_size_t prec;              /* Max precision, in number of `mp_limb's.
-                                  Set by mpf_init and modified by
-                                  mpf_set_prec.  */
-  mp_size_t size;              /* abs(SIZE) is the number of limbs
-                                  the last field points to.  If SIZE
-                                  is negative this is a negative
-                                  number.  */
-  mp_exp_t exp;                        /* Exponent, in the base of `mp_limb'.  */
-  mp_limb *d;                  /* Pointer to the limbs.  */
-} __mpf_struct;
-
-/* typedef __mpf_struct MP_FLOAT; */
-typedef __mpf_struct mpf_t[1];
-
-/* Types for function declarations in gmp files.  */
-/* ??? Should not pollute user name space ??? */
-typedef __gmp_const __mpz_struct *mpz_srcptr;
-typedef __mpz_struct *mpz_ptr;
-typedef __gmp_const __mpf_struct *mpf_srcptr;
-typedef __mpf_struct *mpf_ptr;
-typedef __gmp_const __mpq_struct *mpq_srcptr;
-typedef __mpq_struct *mpq_ptr;
-
-#ifdef __STDC__
-#define _PROTO(x) x
-#else
-#define _PROTO(x) ()
-#endif
-
-void mp_set_memory_functions _PROTO((void *(*) (size_t),
-                                    void *(*) (void *, size_t, size_t),
-                                    void (*) (void *, size_t)));
-
-/**************** Integer (i.e. Z) routines.  ****************/
-
-void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t));
-
-void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr));
-void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
-void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
-void mpz_clear _PROTO ((mpz_ptr));
-void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int));
-int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr));
-int mpz_cmp_si _PROTO ((mpz_srcptr, signed long int));
-int mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int));
-void mpz_com _PROTO ((mpz_ptr, mpz_srcptr));
-void mpz_div_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int));
-void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
-unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
-/* signed */ long int mpz_get_si _PROTO ((mpz_srcptr));
-char *mpz_get_str _PROTO ((char *, int, mpz_srcptr));
-unsigned long int mpz_get_ui _PROTO ((mpz_srcptr));
-mp_limb mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t));
-mp_size_t mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr));
-void mpz_init _PROTO ((mpz_ptr));
-#ifdef FILE
-void mpz_inp_raw _PROTO ((mpz_ptr, FILE *));
-int mpz_inp_str _PROTO ((mpz_ptr, FILE *, int));
-#endif
-void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
-void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr));
-void mpz_init_set_si _PROTO ((mpz_ptr, signed long int));
-int mpz_init_set_str _PROTO ((mpz_ptr, const char *, int));
-void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int));
-void mpz_lcm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
-void mpz_mod_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
-void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr));
-#ifdef FILE
-void mpz_out_raw _PROTO ((FILE *, mpz_srcptr));
-void mpz_out_str _PROTO ((FILE *, int, mpz_srcptr));
-#endif
-int mpz_perfect_square_p _PROTO ((mpz_srcptr));
-mp_size_t mpz_popcount _PROTO ((mpz_srcptr));
-void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
-void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr));
-int mpz_probab_prime_p _PROTO ((mpz_srcptr, int));
-void mpz_random _PROTO ((mpz_ptr, mp_size_t));
-void mpz_random2 _PROTO ((mpz_ptr, mp_size_t));
-void mpz_set _PROTO ((mpz_ptr, mpz_srcptr));
-void mpz_set_si _PROTO ((mpz_ptr, signed long int));
-int mpz_set_str _PROTO ((mpz_ptr, const char *, int));
-void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int));
-size_t mpz_size _PROTO ((mpz_srcptr));
-size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int));
-void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr));
-void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr));
-void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
-void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int));
-
-void mpz_fdiv_q _PROTO((mpz_ptr, mpz_srcptr, mpz_srcptr));
-unsigned long int mpz_fdiv_q_ui _PROTO((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_fdiv_qr _PROTO((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
-unsigned long int mpz_fdiv_qr_ui _PROTO((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_fdiv_r _PROTO((mpz_ptr, mpz_srcptr, mpz_srcptr));
-unsigned long int mpz_fdiv_r_ui _PROTO((mpz_ptr, mpz_srcptr, unsigned long int));
-unsigned long int mpz_fdiv_ui _PROTO((mpz_srcptr, unsigned long int));
-void mpz_tdiv_q _PROTO((mpz_ptr, mpz_srcptr, mpz_srcptr));
-void mpz_tdiv_q_ui _PROTO((mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_tdiv_qr _PROTO((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
-void mpz_tdiv_qr_ui _PROTO((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
-void mpz_tdiv_r _PROTO((mpz_ptr, mpz_srcptr, mpz_srcptr));
-void mpz_tdiv_r_ui _PROTO((mpz_ptr, mpz_srcptr, unsigned long int));
-
-/**************** Rational (i.e. Q) routines.  ****************/
-
-void mpq_init _PROTO ((mpq_ptr));
-void mpq_clear _PROTO ((mpq_ptr));
-void mpq_set _PROTO ((mpq_ptr, mpq_srcptr));
-void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int));
-void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int));
-void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
-void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
-void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
-void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
-void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr));
-int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr));
-void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr));
-void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr));
-void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr));
-void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr));
-void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr));
-
-/**************** Float (i.e. F) routines.  ****************/
-
-void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr));
-void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
-void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
-void mpf_clear _PROTO ((mpf_ptr));
-int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr));
-int mpf_cmp_si _PROTO ((mpf_srcptr, long int));
-int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int));
-void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
-void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
-void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
-void mpf_dump _PROTO ((mpf_srcptr));
-char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr));
-void mpf_init _PROTO ((mpf_ptr));
-void mpf_init2 _PROTO ((mpf_ptr, mp_size_t));
-#ifdef FILE
-void mpf_inp_str _PROTO ((mpf_ptr, FILE *, int));
-#endif
-void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr));
-void mpf_init_set_d _PROTO ((mpf_ptr, double));
-void mpf_init_set_si _PROTO ((mpf_ptr, long int));
-int mpf_init_set_str _PROTO ((mpf_ptr, char *, int));
-void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int));
-void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
-void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
-void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
-void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr));
-#ifdef FILE
-void mpf_out_str _PROTO ((mpf_ptr, int, size_t, FILE *));
-#endif
-void mpf_set _PROTO ((mpf_ptr, mpf_srcptr));
-void mpf_set_d _PROTO ((mpf_ptr, double));
-mp_size_t mpf_set_default_prec _PROTO ((mp_size_t));
-void mpf_set_si _PROTO ((mpf_ptr, long int));
-int mpf_set_str _PROTO ((mpf_ptr, const char *, int));
-void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int));
-size_t mpf_size _PROTO ((mpf_srcptr));
-void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr));
-void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int));
-void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
-void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
-void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
-
-/************ Low level positive-integer (i.e. N) routines.  ************/
-
-/* This is ugly, but we need to make usr calls reach the prefixed function.  */
-#define mpn_add_n      __mpn_add_n
-#define mpn_sub_n      __mpn_sub_n
-#define mpn_mul_1      __mpn_mul_1
-#define mpn_addmul_1   __mpn_addmul_1
-#define mpn_submul_1   __mpn_submul_1
-#define mpn_lshift     __mpn_lshift
-#define mpn_rshift     __mpn_rshift
-#define mpn_sub                __mpn_sub
-#define mpn_add                __mpn_add
-#define mpn_normal_size        __mpn_normal_size
-#define mpn_cmp                __mpn_cmp
-#define mpn_add_1      __mpn_add_1
-#define mpn_sub_1      __mpn_sub_1
-#define mpn_mul_n      __mpn_mul_n
-#define mpn_mul                __mpn_mul
-#define mpn_divmod     __mpn_divmod
-#define mpn_divmod_1   __mpn_divmod_1
-#define mpn_mod_1      __mpn_mod_1
-#define mpn_sqrt       __mpn_sqrt
-#define mpn_next_bit_set __mpn_next_bit_set
-#define mpn_popcount   __mpn_popcount
-#define mpn_hamdist    __mpn_hamdist
-#define mpn_random2    __mpn_random2
-#define mpn_set_str    __mpn_set_str
-#define mpn_get_str    __mpn_get_str
-#define mpn_gcd_1      __mpn_gcd_1
-
-mp_limb __mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
-mp_limb __mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
-mp_limb __mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t));
-void __mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
-mp_limb __mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb));
-mp_limb __mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb));
-mp_limb __mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb));
-mp_limb __mpn_divmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t));
-mp_limb __mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb));
-mp_limb __mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb));
-mp_limb __mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
-mp_limb __mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
-mp_size_t __mpn_sqrt _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t));
-int __mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
-mp_size_t __mpn_next_bit_set _PROTO ((mp_srcptr, mp_size_t));
-mp_size_t __mpn_popcount _PROTO ((mp_srcptr, mp_size_t));
-mp_size_t __mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
-void __mpn_random2 _PROTO ((mp_ptr, mp_size_t));
-mp_size_t __mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int));
-size_t __mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t));
-mp_limb __mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb));
-
-
-static __gmp_inline mp_limb
-#if __STDC__
-__mpn_add_1 (register mp_ptr res_ptr,
-            register mp_srcptr s1_ptr,
-            register mp_size_t s1_size,
-            register mp_limb s2_limb)
-#else
-__mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb)
-     register mp_ptr res_ptr;
-     register mp_srcptr s1_ptr;
-     register mp_size_t s1_size;
-     register mp_limb s2_limb;
-#endif
-{
-  register mp_limb x;
-
-  x = *s1_ptr++;
-  s2_limb = x + s2_limb;
-  *res_ptr++ = s2_limb;
-  if (s2_limb < x)
-    {
-      while (--s1_size != 0)
-       {
-         x = *s1_ptr++ + 1;
-         *res_ptr++ = x;
-         if (x != 0)
-           goto fin;
-       }
-
-      return 1;
-    }
-
- fin:
-  if (res_ptr != s1_ptr)
-    {
-      mp_size_t i;
-      for (i = 0; i < s1_size - 1; i++)
-       res_ptr[i] = s1_ptr[i];
-    }
-  return 0;
-}
-
-static __gmp_inline mp_limb
-#if __STDC__
-__mpn_add (register mp_ptr res_ptr,
-          register mp_srcptr s1_ptr,
-          register mp_size_t s1_size,
-          register mp_srcptr s2_ptr,
-          register mp_size_t s2_size)
-#else
-__mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
-     register mp_ptr res_ptr;
-     register mp_srcptr s1_ptr;
-     register mp_size_t s1_size;
-     register mp_srcptr s2_ptr;
-     register mp_size_t s2_size;
-#endif
-{
-  mp_limb cy_limb = 0;
-
-  if (s2_size != 0)
-    cy_limb = __mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size);
-
-  if (s1_size - s2_size != 0)
-    cy_limb =  __mpn_add_1 (res_ptr + s2_size,
-                           s1_ptr + s2_size,
-                           s1_size - s2_size,
-                           cy_limb);
-  return cy_limb;
-}
-
-static __gmp_inline mp_limb
-#if __STDC__
-__mpn_sub_1 (register mp_ptr res_ptr,
-            register mp_srcptr s1_ptr,
-            register mp_size_t s1_size,
-            register mp_limb s2_limb)
-#else
-__mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb)
-     register mp_ptr res_ptr;
-     register mp_srcptr s1_ptr;
-     register mp_size_t s1_size;
-     register mp_limb s2_limb;
-#endif
-{
-  register mp_limb x;
-
-  x = *s1_ptr++;
-  s2_limb = x - s2_limb;
-  *res_ptr++ = s2_limb;
-  if (s2_limb > x)
-    {
-      while (--s1_size != 0)
-       {
-         x = *s1_ptr++;
-         *res_ptr++ = x - 1;
-         if (x != 0)
-           goto fin;
-       }
-
-      return 1;
-    }
-
- fin:
-  if (res_ptr != s1_ptr)
-    {
-      mp_size_t i;
-      for (i = 0; i < s1_size - 1; i++)
-       res_ptr[i] = s1_ptr[i];
-    }
-  return 0;
-}
-
-static __gmp_inline mp_limb
-#if __STDC__
-__mpn_sub (register mp_ptr res_ptr,
-          register mp_srcptr s1_ptr,
-          register mp_size_t s1_size,
-          register mp_srcptr s2_ptr,
-          register mp_size_t s2_size)
-#else
-__mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
-     register mp_ptr res_ptr;
-     register mp_srcptr s1_ptr;
-     register mp_size_t s1_size;
-     register mp_srcptr s2_ptr;
-     register mp_size_t s2_size;
-#endif
-{
-  mp_limb cy_limb = 0;
-
-  if (s2_size != 0)
-    cy_limb = __mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size);
-
-  if (s1_size - s2_size != 0)
-    cy_limb =  __mpn_sub_1 (res_ptr + s2_size,
-                           s1_ptr + s2_size,
-                           s1_size - s2_size,
-                           cy_limb);
-  return cy_limb;
-}
-
-static __gmp_inline mp_size_t
-#if __STDC__
-__mpn_normal_size (mp_srcptr ptr, mp_size_t size)
-#else
-__mpn_normal_size (ptr, size)
-     mp_srcptr ptr;
-     mp_size_t size;
-#endif
-{
-  while (size)
-    {
-      size--;
-      if (ptr[size] != 0)
-       return size + 1;
-    }
-  return 0;
-}
-
-/* Compatibility with GMP 1.  */
-
-#define mpz_mdiv       mpz_fdiv_q
-#define mpz_mdivmod    mpz_fdiv_qr
-#define mpz_mmod       mpz_fdiv_r
-#define mpz_mdiv_ui    mpz_fdiv_q_ui
-#define mpz_mdivmod_ui(q,r,n,d) \
-  ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
-#define mpz_mmod_ui(r,n,d) \
-  ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
-/* ??? Before release...
-#define mpz_div_2exp   mpz_fdiv_q_2exp
-#define mpz_mod_2exp   mpz_fdiv_r_2exp
-*/
-
-/* Useful synonyms, but not quite compatible with GMP 1.  */
-#define mpz_div                mpz_fdiv_q
-#define mpz_divmod     mpz_fdiv_qr
-#define mpz_mod                mpz_fdiv_r
-#define mpz_div_ui     mpz_fdiv_q_ui
-#define mpz_divmod_ui  mpz_fdiv_qr_ui
-#define mpz_mod_ui     mpz_fdiv_r_ui
-
-
-#define __GNU_MP__ 2
-#define __GNU_MP_VERSION 2
-#define __GNU_MP_VERSION_MINOR -900 /* ??? */
-#define __GMP_H__
-#endif /* __GMP_H__ */
diff --git a/stdio/longlong.h b/stdio/longlong.h
deleted file mode 100644 (file)
index 97c469d..0000000
+++ /dev/null
@@ -1,1295 +0,0 @@
-/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
-
-Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
-
-This file is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-This file is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with this file; see the file COPYING.LIB.  If not, write to
-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* You have to define the following before including this file:
-
-   UWtype -- An unsigned type, default type for operations (typically a "word")
-   UHWtype -- An unsigned type, at least half the size of UWtype.
-   UDWtype -- An unsigned type, at least twice as large a UWtype
-   W_TYPE_SIZE -- size in bits of UWtype
-
-   SItype, USItype -- Signed and unsigned 32 bit types.
-   DItype, UDItype -- Signed and unsigned 64 bit types.
-
-   On a 32 bit machine UWtype should typically be USItype;
-   on a 64 bit machine, UWtype should typically be UDItype.
-*/
-
-#define __BITS4 (W_TYPE_SIZE / 4)
-#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
-#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
-#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
-
-/* Define auxiliary asm macros.
-
-   1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two
-   UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype
-   word product in HIGH_PROD and LOW_PROD.
-
-   2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a
-   UDWtype product.  This is just a variant of umul_ppmm.
-
-   3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
-   denominator) divides a UDWtype, composed by the UWtype integers
-   HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient
-   in QUOTIENT and the remainder in REMAINDER.  HIGH_NUMERATOR must be less
-   than DENOMINATOR for correct operation.  If, in addition, the most
-   significant bit of DENOMINATOR must be 1, then the pre-processor symbol
-   UDIV_NEEDS_NORMALIZATION is defined to 1.
-
-   4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
-   denominator).  Like udiv_qrnnd but the numbers are signed.  The quotient
-   is rounded towards 0.
-
-   5) count_leading_zeros(count, x) counts the number of zero-bits from the
-   msb to the first non-zero bit in the UWtype X.  This is the number of
-   steps X needs to be shifted left to set the msb.  Undefined for X == 0,
-   unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value.
-
-   6) count_trailing_zeros(count, x) like count_leading_zeros, but counts
-   from the least significant end.
-
-   7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
-   high_addend_2, low_addend_2) adds two UWtype integers, composed by
-   HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2
-   respectively.  The result is placed in HIGH_SUM and LOW_SUM.  Overflow
-   (i.e. carry out) is not stored anywhere, and is lost.
-
-   8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend,
-   high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers,
-   composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and
-   LOW_SUBTRAHEND_2 respectively.  The result is placed in HIGH_DIFFERENCE
-   and LOW_DIFFERENCE.  Overflow (i.e. carry out) is not stored anywhere,
-   and is lost.
-
-   If any of these macros are left undefined for a particular CPU,
-   C macros are used.  */
-
-/* The CPUs come in alphabetical order below.
-
-   Please add support for more CPUs here, or improve the current support
-   for the CPUs below!  */
-
-#if defined (__GNUC__) && !defined (NO_ASM)
-
-/* We sometimes need to clobber "cc" with gcc2, but that would not be
-   understood by gcc1.  Use cpp to avoid major code duplication.  */
-#if __GNUC__ < 2
-#define __CLOBBER_CC
-#define __AND_CLOBBER_CC
-#else /* __GNUC__ >= 2 */
-#define __CLOBBER_CC : "cc"
-#define __AND_CLOBBER_CC , "cc"
-#endif /* __GNUC__ < 2 */
-
-#if (defined (__a29k__) || defined (___AM29K__)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("add %1,%4,%5
-       addc %0,%2,%3"                                                  \
-          : "=r" ((USItype)(sh)),                                      \
-           "=&r" ((USItype)(sl))                                       \
-          : "%r" ((USItype)(ah)),                                      \
-            "rI" ((USItype)(bh)),                                      \
-            "%r" ((USItype)(al)),                                      \
-            "rI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("sub %1,%4,%5
-       subc %0,%2,%3"                                                  \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "r" ((USItype)(ah)),                                       \
-            "rI" ((USItype)(bh)),                                      \
-            "r" ((USItype)(al)),                                       \
-            "rI" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
-  do {                                                                 \
-    USItype __m0 = (m0), __m1 = (m1);                                  \
-    __asm__ ("multiplu %0,%1,%2"                                       \
-            : "=r" ((USItype)(xl))                                     \
-            : "r" (__m0),                                              \
-              "r" (__m1));                                             \
-    __asm__ ("multmu %0,%1,%2"                                         \
-            : "=r" ((USItype)(xh))                                     \
-            : "r" (__m0),                                              \
-              "r" (__m1));                                             \
-  } while (0)
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  __asm__ ("dividu %0,%3,%4"                                           \
-          : "=r" ((USItype)(q)),                                       \
-            "=q" ((USItype)(r))                                        \
-          : "1" ((USItype)(n1)),                                       \
-            "r" ((USItype)(n0)),                                       \
-            "r" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
-    __asm__ ("clz %0,%1"                                               \
-            : "=r" ((USItype)(count))                                  \
-            : "r" ((USItype)(x)))
-#endif /* __a29k__ */
-
-#if defined (__alpha__) && W_TYPE_SIZE == 64
-#define umul_ppmm(ph, pl, m0, m1) \
-  do {                                                                 \
-    UDItype __m0 = (m0), __m1 = (m1);                                  \
-    __asm__ ("umulh %r1,%2,%0"                                         \
-            : "=r" ((UDItype) ph)                                      \
-            : "%rJ" (__m0),                                            \
-              "rI" (__m1));                                            \
-    (pl) = __m0 * __m1;                                                        \
-  } while (0)
-#define UMUL_TIME 46
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  do { UDItype __r;                                                    \
-    (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));                                \
-    (r) = __r;                                                         \
-  } while (0)
-extern UDItype __udiv_qrnnd ();
-#define UDIV_TIME 220
-#endif
-
-#if defined (__arm__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("adds %1,%4,%5
-       adc %0,%2,%3"                                                   \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "%r" ((USItype)(ah)),                                      \
-            "rI" ((USItype)(bh)),                                      \
-            "%r" ((USItype)(al)),                                      \
-            "rI" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subs %1,%4,%5
-       sbc %0,%2,%3"                                                   \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "r" ((USItype)(ah)),                                       \
-            "rI" ((USItype)(bh)),                                      \
-            "r" ((USItype)(al)),                                       \
-            "rI" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, a, b) \
-  __asm__ ("; Inlined umul_ppmm
-       mov     r0,%2 lsr 16
-       mov     r2,%3 lsr 16
-       bic     r1,%2,r0 lsl 16
-       bic     r2,%3,r2 lsl 16
-       mul     %1,r1,r2
-       mul     r2,r0,r2
-       mul     r1,%0,r1
-       mul     %0,r0,%0
-       adds    r1,r2,r1
-       addcs   %0,%0,0x10000
-       adds    %1,%1,r1 lsl 16
-       adc     %0,%0,r1 lsr 16"                                        \
-          : "=&r" ((USItype)(xh)),                                     \
-            "=r" ((USItype)(xl))                                       \
-          : "r" ((USItype)(a)),                                        \
-            "r" ((USItype)(b))                                         \
-          : "r0", "r1", "r2")
-#define UMUL_TIME 20
-#define UDIV_TIME 100
-#endif /* __arm__ */
-
-#if defined (__clipper__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
-  ({union {UDItype __ll;                                               \
-          struct {USItype __l, __h;} __i;                              \
-         } __xx;                                                       \
-  __asm__ ("mulwux %2,%0"                                              \
-          : "=r" (__xx.__ll)                                           \
-          : "%0" ((USItype)(u)),                                       \
-            "r" ((USItype)(v)));                                       \
-  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define smul_ppmm(w1, w0, u, v) \
-  ({union {DItype __ll;                                                        \
-          struct {SItype __l, __h;} __i;                               \
-         } __xx;                                                       \
-  __asm__ ("mulwx %2,%0"                                               \
-          : "=r" (__xx.__ll)                                           \
-          : "%0" ((SItype)(u)),                                        \
-            "r" ((SItype)(v)));                                        \
-  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
-  ({UDItype __w;                                                       \
-    __asm__ ("mulwux %2,%0"                                            \
-            : "=r" (__w)                                               \
-            : "%0" ((USItype)(u)),                                     \
-              "r" ((USItype)(v)));                                     \
-    __w; })
-#endif /* __clipper__ */
-
-#if defined (__gmicro__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("add.w %5,%1
-       addx %3,%0"                                                     \
-          : "=g" ((USItype)(sh)),                                      \
-            "=&g" ((USItype)(sl))                                      \
-          : "%0" ((USItype)(ah)),                                      \
-            "g" ((USItype)(bh)),                                       \
-            "%1" ((USItype)(al)),                                      \
-            "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("sub.w %5,%1
-       subx %3,%0"                                                     \
-          : "=g" ((USItype)(sh)),                                      \
-            "=&g" ((USItype)(sl))                                      \
-          : "0" ((USItype)(ah)),                                       \
-            "g" ((USItype)(bh)),                                       \
-            "1" ((USItype)(al)),                                       \
-            "g" ((USItype)(bl)))
-#define umul_ppmm(ph, pl, m0, m1) \
-  __asm__ ("mulx %3,%0,%1"                                             \
-          : "=g" ((USItype)(ph)),                                      \
-            "=r" ((USItype)(pl))                                       \
-          : "%0" ((USItype)(m0)),                                      \
-            "g" ((USItype)(m1)))
-#define udiv_qrnnd(q, r, nh, nl, d) \
-  __asm__ ("divx %4,%0,%1"                                             \
-          : "=g" ((USItype)(q)),                                       \
-            "=r" ((USItype)(r))                                        \
-          : "1" ((USItype)(nh)),                                       \
-            "0" ((USItype)(nl)),                                       \
-            "g" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
-  __asm__ ("bsch/1 %1,%0"                                              \
-          : "=g" (count)                                               \
-          : "g" ((USItype)(x)),                                        \
-            "0" ((USItype)0))
-#endif
-
-#if defined (__hppa) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("add %4,%5,%1
-       addc %2,%3,%0"                                                  \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "%rM" ((USItype)(ah)),                                     \
-            "rM" ((USItype)(bh)),                                      \
-            "%rM" ((USItype)(al)),                                     \
-            "rM" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("sub %4,%5,%1
-       subb %2,%3,%0"                                                  \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "rM" ((USItype)(ah)),                                      \
-            "rM" ((USItype)(bh)),                                      \
-            "rM" ((USItype)(al)),                                      \
-            "rM" ((USItype)(bl)))
-#if defined (_PA_RISC1_1)
-#define umul_ppmm(wh, wl, u, v) \
-  do {                                                                 \
-    union {UDItype __ll;                                               \
-          struct {USItype __h, __l;} __i;                              \
-         } __xx;                                                       \
-    __asm__ ("xmpyu %1,%2,%0"                                          \
-            : "=x" (__xx.__ll)                                         \
-            : "x" ((USItype)(u)),                                      \
-              "x" ((USItype)(v)));                                     \
-    (wh) = __xx.__i.__h;                                               \
-    (wl) = __xx.__i.__l;                                               \
-  } while (0)
-#define UMUL_TIME 8
-#define UDIV_TIME 60
-#else
-#define UMUL_TIME 40
-#define UDIV_TIME 80
-#endif
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  do { USItype __r;                                                    \
-    (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));                                \
-    (r) = __r;                                                         \
-  } while (0)
-extern USItype __udiv_qrnnd ();
-#define count_leading_zeros(count, x) \
-  do {                                                                 \
-    USItype __tmp;                                                     \
-    __asm__ (                                                          \
-       "ldi            1,%0
-       extru,=         %1,15,16,%%r0           ; Bits 31..16 zero?
-       extru,tr        %1,15,16,%1             ; No.  Shift down, skip add.
-       ldo             16(%0),%0               ; Yes.  Perform add.
-       extru,=         %1,23,8,%%r0            ; Bits 15..8 zero?
-       extru,tr        %1,23,8,%1              ; No.  Shift down, skip add.
-       ldo             8(%0),%0                ; Yes.  Perform add.
-       extru,=         %1,27,4,%%r0            ; Bits 7..4 zero?
-       extru,tr        %1,27,4,%1              ; No.  Shift down, skip add.
-       ldo             4(%0),%0                ; Yes.  Perform add.
-       extru,=         %1,29,2,%%r0            ; Bits 3..2 zero?
-       extru,tr        %1,29,2,%1              ; No.  Shift down, skip add.
-       ldo             2(%0),%0                ; Yes.  Perform add.
-       extru           %1,30,1,%1              ; Extract bit 1.
-       sub             %0,%1,%0                ; Subtract it.
-       " : "=r" (count), "=r" (__tmp) : "1" (x));                      \
-  } while (0)
-#endif
-
-#if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32
-#define umul_ppmm(xh, xl, m0, m1) \
-  do {                                                                 \
-    union {UDItype __ll;                                               \
-          struct {USItype __h, __l;} __i;                              \
-         } __xx;                                                       \
-    USItype __m0 = (m0), __m1 = (m1);                                  \
-    __asm__ ("mr %0,%3"                                                        \
-            : "=r" (__xx.__i.__h),                                     \
-              "=r" (__xx.__i.__l)                                      \
-            : "%1" (__m0),                                             \
-              "r" (__m1));                                             \
-    (xh) = __xx.__i.__h; (xl) = __xx.__i.__l;                          \
-    (xh) += ((((SItype) __m0 >> 31) & __m1)                            \
-            + (((SItype) __m1 >> 31) & __m0));                         \
-  } while (0)
-#define smul_ppmm(xh, xl, m0, m1) \
-  do {                                                                 \
-    union {DItype __ll;                                                        \
-          struct {USItype __h, __l;} __i;                              \
-         } __xx;                                                       \
-    __asm__ ("mr %0,%3"                                                        \
-            : "=r" (__xx.__i.__h),                                     \
-              "=r" (__xx.__i.__l)                                      \
-            : "%1" (m0),                                               \
-              "r" (m1));                                               \
-    (xh) = __xx.__i.__h; (xl) = __xx.__i.__l;                          \
-  } while (0)
-#define sdiv_qrnnd(q, r, n1, n0, d) \
-  do {                                                                 \
-    union {DItype __ll;                                                        \
-          struct {USItype __h, __l;} __i;                              \
-         } __xx;                                                       \
-    __xx.__i.__h = n1; __xx.__i.__l = n0;                              \
-    __asm__ ("dr %0,%2"                                                        \
-            : "=r" (__xx.__ll)                                         \
-            : "0" (__xx.__ll), "r" (d));                               \
-    (q) = __xx.__i.__l; (r) = __xx.__i.__h;                            \
-  } while (0)
-#endif
-
-#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addl %5,%1
-       adcl %3,%0"                                                     \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "%0" ((USItype)(ah)),                                      \
-            "g" ((USItype)(bh)),                                       \
-            "%1" ((USItype)(al)),                                      \
-            "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subl %5,%1
-       sbbl %3,%0"                                                     \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "0" ((USItype)(ah)),                                       \
-            "g" ((USItype)(bh)),                                       \
-            "1" ((USItype)(al)),                                       \
-            "g" ((USItype)(bl)))
-#define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("mull %3"                                                   \
-          : "=a" ((USItype)(w0)),                                      \
-            "=d" ((USItype)(w1))                                       \
-          : "%0" ((USItype)(u)),                                       \
-            "rm" ((USItype)(v)))
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  __asm__ ("divl %4"                                                   \
-          : "=a" ((USItype)(q)),                                       \
-            "=d" ((USItype)(r))                                        \
-          : "0" ((USItype)(n0)),                                       \
-            "1" ((USItype)(n1)),                                       \
-            "rm" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
-  do {                                                                 \
-    USItype __cbtmp;                                                   \
-    __asm__ ("bsrl %1,%0"                                              \
-            : "=r" (__cbtmp) : "rm" ((USItype)(x)));                   \
-    (count) = __cbtmp ^ 31;                                            \
-  } while (0)
-#define count_trailing_zeros(count, x) \
-  __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x)))
-#define UMUL_TIME 40
-#define UDIV_TIME 40
-#endif /* 80x86 */
-
-#if defined (__i960__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
-  ({union {UDItype __ll;                                               \
-          struct {USItype __l, __h;} __i;                              \
-         } __xx;                                                       \
-  __asm__ ("emul       %2,%1,%0"                                       \
-          : "=d" (__xx.__ll)                                           \
-          : "%dI" ((USItype)(u)),                                      \
-            "dI" ((USItype)(v)));                                      \
-  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
-  ({UDItype __w;                                                       \
-    __asm__ ("emul     %2,%1,%0"                                       \
-            : "=d" (__w)                                               \
-            : "%dI" ((USItype)(u)),                                    \
-              "dI" ((USItype)(v)));                                    \
-    __w; })  
-#endif /* __i960__ */
-
-#if defined (__mc68000__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("add%.l %5,%1
-       addx%.l %3,%0"                                                  \
-          : "=d" ((USItype)(sh)),                                      \
-            "=&d" ((USItype)(sl))                                      \
-          : "%0" ((USItype)(ah)),                                      \
-            "d" ((USItype)(bh)),                                       \
-            "%1" ((USItype)(al)),                                      \
-            "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("sub%.l %5,%1
-       subx%.l %3,%0"                                                  \
-          : "=d" ((USItype)(sh)),                                      \
-            "=&d" ((USItype)(sl))                                      \
-          : "0" ((USItype)(ah)),                                       \
-            "d" ((USItype)(bh)),                                       \
-            "1" ((USItype)(al)),                                       \
-            "g" ((USItype)(bl)))
-#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("mulu%.l %3,%1:%0"                                          \
-          : "=d" ((USItype)(w0)),                                      \
-            "=d" ((USItype)(w1))                                       \
-          : "%0" ((USItype)(u)),                                       \
-            "dmi" ((USItype)(v)))
-#define UMUL_TIME 45
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  __asm__ ("divu%.l %4,%1:%0"                                          \
-          : "=d" ((USItype)(q)),                                       \
-            "=d" ((USItype)(r))                                        \
-          : "0" ((USItype)(n0)),                                       \
-            "1" ((USItype)(n1)),                                       \
-            "dmi" ((USItype)(d)))
-#define UDIV_TIME 90
-#define sdiv_qrnnd(q, r, n1, n0, d) \
-  __asm__ ("divs%.l %4,%1:%0"                                          \
-          : "=d" ((USItype)(q)),                                       \
-            "=d" ((USItype)(r))                                        \
-          : "0" ((USItype)(n0)),                                       \
-            "1" ((USItype)(n1)),                                       \
-            "dmi" ((USItype)(d)))
-#define count_leading_zeros(count, x) \
-  __asm__ ("bfffo %1{%b2:%b2},%0"                                      \
-          : "=d" ((USItype)(count))                                    \
-          : "od" ((USItype)(x)), "n" (0))
-#else /* not mc68020 */
-#define umul_ppmm(xh, xl, a, b) \
-  __asm__ ("| Inlined umul_ppmm
-       move%.l %2,%/d0
-       move%.l %3,%/d1
-       move%.l %/d0,%/d2
-       swap    %/d0
-       move%.l %/d1,%/d3
-       swap    %/d1
-       move%.w %/d2,%/d4
-       mulu    %/d3,%/d4
-       mulu    %/d1,%/d2
-       mulu    %/d0,%/d3
-       mulu    %/d0,%/d1
-       move%.l %/d4,%/d0
-       eor%.w  %/d0,%/d0
-       swap    %/d0
-       add%.l  %/d0,%/d2
-       add%.l  %/d3,%/d2
-       jcc     1f
-       add%.l  #65536,%/d1
-1:     swap    %/d2
-       moveq   #0,%/d0
-       move%.w %/d2,%/d0
-       move%.w %/d4,%/d2
-       move%.l %/d2,%1
-       add%.l  %/d1,%/d0
-       move%.l %/d0,%0"                                                \
-          : "=g" ((USItype)(xh)),                                      \
-            "=g" ((USItype)(xl))                                       \
-          : "g" ((USItype)(a)),                                        \
-            "g" ((USItype)(b))                                         \
-          : "d0", "d1", "d2", "d3", "d4")
-#define UMUL_TIME 100
-#define UDIV_TIME 400
-#endif /* not mc68020 */
-#endif /* mc68000 */
-
-#if defined (__m88000__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addu.co %1,%r4,%r5
-       addu.ci %0,%r2,%r3"                                             \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "%rJ" ((USItype)(ah)),                                     \
-            "rJ" ((USItype)(bh)),                                      \
-            "%rJ" ((USItype)(al)),                                     \
-            "rJ" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subu.co %1,%r4,%r5
-       subu.ci %0,%r2,%r3"                                             \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "rJ" ((USItype)(ah)),                                      \
-            "rJ" ((USItype)(bh)),                                      \
-            "rJ" ((USItype)(al)),                                      \
-            "rJ" ((USItype)(bl)))
-#define count_leading_zeros(count, x) \
-  do {                                                                 \
-    USItype __cbtmp;                                                   \
-    __asm__ ("ff1 %0,%1"                                               \
-            : "=r" (__cbtmp)                                           \
-            : "r" ((USItype)(x)));                                     \
-    (count) = __cbtmp ^ 31;                                            \
-  } while (0)
-#if defined (__mc88110__)
-#define umul_ppmm(wh, wl, u, v) \
-  do {                                                                 \
-    union {UDItype __ll;                                               \
-          struct {USItype __h, __l;} __i;                              \
-         } __xx;                                                       \
-    __asm__ ("mulu.d   %0,%1,%2"                                       \
-            : "=r" (__xx.__ll)                                         \
-            : "r" ((USItype)(u)),                                      \
-              "r" ((USItype)(v)));                                     \
-    (wh) = __xx.__i.__h;                                               \
-    (wl) = __xx.__i.__l;                                               \
-  } while (0)
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  ({union {UDItype __ll;                                               \
-          struct {USItype __h, __l;} __i;                              \
-         } __xx;                                                       \
-  USItype __q;                                                         \
-  __xx.__i.__h = (n1); __xx.__i.__l = (n0);                            \
-  __asm__ ("divu.d %0,%1,%2"                                           \
-          : "=r" (__q)                                                 \
-          : "r" (__xx.__ll),                                           \
-            "r" ((USItype)(d)));                                       \
-  (r) = (n0) - __q * (d); (q) = __q; })
-#define UMUL_TIME 5
-#define UDIV_TIME 25
-#else
-#define UMUL_TIME 17
-#define UDIV_TIME 150
-#endif /* __mc88110__ */
-#endif /* __m88000__ */
-
-#if defined (__mips__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("multu %2,%3
-       mflo %0
-       mfhi %1"                                                        \
-          : "=d" ((USItype)(w0)),                                      \
-            "=d" ((USItype)(w1))                                       \
-          : "d" ((USItype)(u)),                                        \
-            "d" ((USItype)(v)))
-#define UMUL_TIME 10
-#define UDIV_TIME 100
-#endif /* __mips__ */
-
-#if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
-#define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("dmultu %2,%3
-       mflo %0
-       mfhi %1"                                                        \
-          : "=d" ((UDItype)(w0)),                                      \
-            "=d" ((UDItype)(w1))                                       \
-          : "d" ((UDItype)(u)),                                        \
-            "d" ((UDItype)(v)))
-#define UMUL_TIME 10
-#define UDIV_TIME 100
-#endif /* __mips__ */
-
-#if defined (__ns32000__) && W_TYPE_SIZE == 32
-#define umul_ppmm(w1, w0, u, v) \
-  ({union {UDItype __ll;                                               \
-          struct {USItype __l, __h;} __i;                              \
-         } __xx;                                                       \
-  __asm__ ("meid %2,%0"                                                        \
-          : "=g" (__xx.__ll)                                           \
-          : "%0" ((USItype)(u)),                                       \
-            "g" ((USItype)(v)));                                       \
-  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#define __umulsidi3(u, v) \
-  ({UDItype __w;                                                       \
-    __asm__ ("meid %2,%0"                                              \
-            : "=g" (__w)                                               \
-            : "%0" ((USItype)(u)),                                     \
-              "g" ((USItype)(v)));                                     \
-    __w; })
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  ({union {UDItype __ll;                                               \
-          struct {USItype __l, __h;} __i;                              \
-         } __xx;                                                       \
-  __xx.__i.__h = (n1); __xx.__i.__l = (n0);                            \
-  __asm__ ("deid %2,%0"                                                        \
-          : "=g" (__xx.__ll)                                           \
-          : "0" (__xx.__ll),                                           \
-            "g" ((USItype)(d)));                                       \
-  (r) = __xx.__i.__l; (q) = __xx.__i.__h; })
-#define count_trailing_zeros(count,x) \
-  do {
-    __asm__ ("ffsd     %2,%0"                                          \
-            : "=r" ((USItype) (count))                                 \
-            : "0" ((USItype) 0),                                       \
-              "r" ((USItype) (x)));                                    \
-  } while (0)
-#endif /* __ns32000__ */
-
-#if (defined (__powerpc__) || defined (___IBMR2__)) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  do {                                                                 \
-    if (__builtin_constant_p (bh) && (bh) == 0)                                \
-      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2"          \
-            : "=r" ((USItype)(sh)),                                    \
-              "=&r" ((USItype)(sl))                                    \
-            : "%r" ((USItype)(ah)),                                    \
-              "%r" ((USItype)(al)),                                    \
-              "rI" ((USItype)(bl)));                                   \
-    else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0)         \
-      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2"          \
-            : "=r" ((USItype)(sh)),                                    \
-              "=&r" ((USItype)(sl))                                    \
-            : "%r" ((USItype)(ah)),                                    \
-              "%r" ((USItype)(al)),                                    \
-              "rI" ((USItype)(bl)));                                   \
-    else                                                               \
-      __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3"         \
-            : "=r" ((USItype)(sh)),                                    \
-              "=&r" ((USItype)(sl))                                    \
-            : "%r" ((USItype)(ah)),                                    \
-              "r" ((USItype)(bh)),                                     \
-              "%r" ((USItype)(al)),                                    \
-              "rI" ((USItype)(bl)));                                   \
-  } while (0)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  do {                                                                 \
-    if (__builtin_constant_p (ah) && (ah) == 0)                                \
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2"              \
-              : "=r" ((USItype)(sh)),                                  \
-                "=&r" ((USItype)(sl))                                  \
-              : "r" ((USItype)(bh)),                                   \
-                "rI" ((USItype)(al)),                                  \
-                "r" ((USItype)(bl)));                                  \
-    else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0)         \
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2"              \
-              : "=r" ((USItype)(sh)),                                  \
-                "=&r" ((USItype)(sl))                                  \
-              : "r" ((USItype)(bh)),                                   \
-                "rI" ((USItype)(al)),                                  \
-                "r" ((USItype)(bl)));                                  \
-    else if (__builtin_constant_p (bh) && (bh) == 0)                   \
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2"                \
-              : "=r" ((USItype)(sh)),                                  \
-                "=&r" ((USItype)(sl))                                  \
-              : "r" ((USItype)(ah)),                                   \
-                "rI" ((USItype)(al)),                                  \
-                "r" ((USItype)(bl)));                                  \
-    else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0)         \
-      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2"                \
-              : "=r" ((USItype)(sh)),                                  \
-                "=&r" ((USItype)(sl))                                  \
-              : "r" ((USItype)(ah)),                                   \
-                "rI" ((USItype)(al)),                                  \
-                "r" ((USItype)(bl)));                                  \
-    else                                                               \
-      __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2"     \
-              : "=r" ((USItype)(sh)),                                  \
-                "=&r" ((USItype)(sl))                                  \
-              : "r" ((USItype)(ah)),                                   \
-                "r" ((USItype)(bh)),                                   \
-                "rI" ((USItype)(al)),                                  \
-                "r" ((USItype)(bl)));                                  \
-  } while (0)
-#define count_leading_zeros(count, x) \
-  __asm__ ("{cntlz|cntlzw} %0,%1"                                      \
-          : "=r" ((USItype)(count))                                    \
-          : "r" ((USItype)(x)))
-#if defined (__powerpc__)
-#define umul_ppmm(ph, pl, m0, m1) \
-  do {                                                                 \
-    USItype __m0 = (m0), __m1 = (m1);                                  \
-    __asm__ ("mulhwu %0,%1,%2"                                         \
-            : "=r" ((USItype) ph)                                      \
-            : "%r" (__m0),                                             \
-              "r" (__m1));                                             \
-    (pl) = __m0 * __m1;                                                        \
-  } while (0)
-#define UMUL_TIME 15
-#define smul_ppmm(ph, pl, m0, m1) \
-  do {                                                                 \
-    SItype __m0 = (m0), __m1 = (m1);                                   \
-    __asm__ ("mulhw %0,%1,%2"                                          \
-            : "=r" ((SItype) ph)                                       \
-            : "%r" (__m0),                                             \
-              "r" (__m1));                                             \
-    (pl) = __m0 * __m1;                                                        \
-  } while (0)
-#define SMUL_TIME 14
-#define UDIV_TIME 120
-#else
-#define umul_ppmm(xh, xl, m0, m1) \
-  do {                                                                 \
-    USItype __m0 = (m0), __m1 = (m1);                                  \
-    __asm__ ("mul %0,%2,%3"                                            \
-            : "=r" ((USItype)(xh)),                                    \
-              "=q" ((USItype)(xl))                                     \
-            : "r" (__m0),                                              \
-              "r" (__m1));                                             \
-    (xh) += ((((SItype) __m0 >> 31) & __m1)                            \
-            + (((SItype) __m1 >> 31) & __m0));                         \
-  } while (0)
-#define UMUL_TIME 8
-#define smul_ppmm(xh, xl, m0, m1) \
-  __asm__ ("mul %0,%2,%3"                                              \
-          : "=r" ((SItype)(xh)),                                       \
-            "=q" ((SItype)(xl))                                        \
-          : "r" (m0),                                                  \
-            "r" (m1))
-#define SMUL_TIME 4
-#define sdiv_qrnnd(q, r, nh, nl, d) \
-  __asm__ ("div %0,%2,%4"                                              \
-          : "=r" ((SItype)(q)), "=q" ((SItype)(r))                     \
-          : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d)))
-#define UDIV_TIME 100
-#endif
-#endif /* Power architecture variants.  */
-
-#if defined (__pyr__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addw       %5,%1
-       addwc   %3,%0"                                                  \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "%0" ((USItype)(ah)),                                      \
-            "g" ((USItype)(bh)),                                       \
-            "%1" ((USItype)(al)),                                      \
-            "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subw       %5,%1
-       subwb   %3,%0"                                                  \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "0" ((USItype)(ah)),                                       \
-            "g" ((USItype)(bh)),                                       \
-            "1" ((USItype)(al)),                                       \
-            "g" ((USItype)(bl)))
-/* This insn doesn't work on ancient pyramids.  */
-#define umul_ppmm(w1, w0, u, v) \
-  ({union {UDItype __ll;                                               \
-          struct {USItype __h, __l;} __i;                              \
-         } __xx;                                                       \
-  __xx.__i.__l = u;                                                    \
-  __asm__ ("uemul %3,%0"                                               \
-          : "=r" (__xx.__i.__h),                                       \
-            "=r" (__xx.__i.__l)                                        \
-          : "1" (__xx.__i.__l),                                        \
-            "g" ((USItype)(v)));                                       \
-  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
-#endif /* __pyr__ */
-
-#if defined (__ibm032__) /* RT/ROMP */  && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("a %1,%5
-       ae %0,%3"                                                       \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "%0" ((USItype)(ah)),                                      \
-            "r" ((USItype)(bh)),                                       \
-            "%1" ((USItype)(al)),                                      \
-            "r" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("s %1,%5
-       se %0,%3"                                                       \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "0" ((USItype)(ah)),                                       \
-            "r" ((USItype)(bh)),                                       \
-            "1" ((USItype)(al)),                                       \
-            "r" ((USItype)(bl)))
-#define umul_ppmm(ph, pl, m0, m1) \
-  do {                                                                 \
-    USItype __m0 = (m0), __m1 = (m1);                                  \
-    __asm__ (                                                          \
-       "s      r2,r2
-       mts     r10,%2
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       m       r2,%3
-       cas     %0,r2,r0
-       mfs     r10,%1"                                                 \
-            : "=r" ((USItype)(ph)),                                    \
-              "=r" ((USItype)(pl))                                     \
-            : "%r" (__m0),                                             \
-               "r" (__m1)                                              \
-            : "r2");                                                   \
-    (ph) += ((((SItype) __m0 >> 31) & __m1)                            \
-            + (((SItype) __m1 >> 31) & __m0));                         \
-  } while (0)
-#define UMUL_TIME 20
-#define UDIV_TIME 200
-#define count_leading_zeros(count, x) \
-  do {                                                                 \
-    if ((x) >= 0x10000)                                                        \
-      __asm__ ("clz    %0,%1"                                          \
-              : "=r" ((USItype)(count))                                \
-              : "r" ((USItype)(x) >> 16));                             \
-    else                                                               \
-      {                                                                        \
-       __asm__ ("clz   %0,%1"                                          \
-                : "=r" ((USItype)(count))                              \
-                : "r" ((USItype)(x)));                                 \
-       (count) += 16;                                                  \
-      }                                                                        \
-  } while (0)
-#endif
-
-#if defined (__sparc__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addcc %r4,%5,%1
-       addx %r2,%3,%0"                                                 \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "%rJ" ((USItype)(ah)),                                     \
-            "rI" ((USItype)(bh)),                                      \
-            "%rJ" ((USItype)(al)),                                     \
-            "rI" ((USItype)(bl))                                       \
-          __CLOBBER_CC)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subcc %r4,%5,%1
-       subx %r2,%3,%0"                                                 \
-          : "=r" ((USItype)(sh)),                                      \
-            "=&r" ((USItype)(sl))                                      \
-          : "rJ" ((USItype)(ah)),                                      \
-            "rI" ((USItype)(bh)),                                      \
-            "rJ" ((USItype)(al)),                                      \
-            "rI" ((USItype)(bl))                                       \
-          __CLOBBER_CC)
-#if defined (__sparc_v8__)
-/* Don't match immediate range because, 1) it is not often useful,
-   2) the 'I' flag thinks of the range as a 13 bit signed interval,
-   while we want to match a 13 bit interval, sign extended to 32 bits,
-   but INTERPRETED AS UNSIGNED.  */
-#define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("umul %2,%3,%1;rd %%y,%0"                                   \
-          : "=r" ((USItype)(w1)),                                      \
-            "=r" ((USItype)(w0))                                       \
-          : "r" ((USItype)(u)),                                        \
-            "r" ((USItype)(v)))
-#define UMUL_TIME 5
-/* We might want to leave this undefined for `SuperSPARC (tm)' since
-   its implementation is crippled and often traps.  */
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\
-          : "=&r" ((USItype)(q)),                                      \
-            "=&r" ((USItype)(r))                                       \
-          : "r" ((USItype)(n1)),                                       \
-            "r" ((USItype)(n0)),                                       \
-            "r" ((USItype)(d)))
-#define UDIV_TIME 25
-#else
-#if defined (__sparclite__)
-/* This has hardware multiply but not divide.  It also has two additional
-   instructions scan (ffs from high bit) and divscc.  */
-#define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("umul %2,%3,%1;rd %%y,%0"                                   \
-          : "=r" ((USItype)(w1)),                                      \
-            "=r" ((USItype)(w0))                                       \
-          : "r" ((USItype)(u)),                                        \
-            "r" ((USItype)(v)))
-#define UMUL_TIME 5
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  __asm__ ("! Inlined udiv_qrnnd
-       wr      %%g0,%2,%%y     ! Not a delayed write for sparclite
-       tst     %%g0
-       divscc  %3,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%%g1
-       divscc  %%g1,%4,%0
-       rd      %%y,%1
-       bl,a 1f
-       add     %1,%4,%1
-1:     ! End of inline udiv_qrnnd"                                     \
-          : "=r" ((USItype)(q)),                                       \
-            "=r" ((USItype)(r))                                        \
-          : "r" ((USItype)(n1)),                                       \
-            "r" ((USItype)(n0)),                                       \
-            "rI" ((USItype)(d))                                        \
-          : "%g1" __AND_CLOBBER_CC)
-#define UDIV_TIME 37
-#define count_leading_zeros(count, x) \
-  __asm__ ("scan %1,0,%0"                                              \
-          : "=r" ((USItype)(x))                                        \
-          : "r" ((USItype)(count)))
-#else
-/* SPARC without integer multiplication and divide instructions.
-   (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */
-#define umul_ppmm(w1, w0, u, v) \
-  __asm__ ("! Inlined umul_ppmm
-       wr      %%g0,%2,%%y     ! SPARC has 0-3 delay insn after a wr
-       sra     %3,31,%%g2      ! Don't move this insn
-       and     %2,%%g2,%%g2    ! Don't move this insn
-       andcc   %%g0,0,%%g1     ! Don't move this insn
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,%3,%%g1
-       mulscc  %%g1,0,%%g1
-       add     %%g1,%%g2,%0
-       rd      %%y,%1"                                                 \
-          : "=r" ((USItype)(w1)),                                      \
-            "=r" ((USItype)(w0))                                       \
-          : "%rI" ((USItype)(u)),                                      \
-            "r" ((USItype)(v))                                         \
-          : "%g1", "%g2" __AND_CLOBBER_CC)
-#define UMUL_TIME 39           /* 39 instructions */
-#define udiv_qrnnd(q, r, n1, n0, d) \
-  do { USItype __r;                                                    \
-    (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));                                \
-    (r) = __r;                                                         \
-  } while (0)
-extern USItype __udiv_qrnnd ();
-#define UDIV_TIME 140
-#endif /* __sparclite__ */
-#endif /* __sparc_v8__ */
-#endif /* __sparc__ */
-
-#if defined (__vax__) && W_TYPE_SIZE == 32
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("addl2 %5,%1
-       adwc %3,%0"                                                     \
-          : "=g" ((USItype)(sh)),                                      \
-            "=&g" ((USItype)(sl))                                      \
-          : "%0" ((USItype)(ah)),                                      \
-            "g" ((USItype)(bh)),                                       \
-            "%1" ((USItype)(al)),                                      \
-            "g" ((USItype)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("subl2 %5,%1
-       sbwc %3,%0"                                                     \
-          : "=g" ((USItype)(sh)),                                      \
-            "=&g" ((USItype)(sl))                                      \
-          : "0" ((USItype)(ah)),                                       \
-            "g" ((USItype)(bh)),                                       \
-            "1" ((USItype)(al)),                                       \
-            "g" ((USItype)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
-  do {                                                                 \
-    union {UDItype __ll;                                               \
-          struct {USItype __l, __h;} __i;                              \
-         } __xx;                                                       \
-    USItype __m0 = (m0), __m1 = (m1);                                  \
-    __asm__ ("emul %1,%2,$0,%0"                                                \
-            : "=g" (__xx.__ll)                                         \
-            : "g" (__m0),                                              \
-              "g" (__m1));                                             \
-    (xh) = __xx.__i.__h; (xl) = __xx.__i.__l;                          \
-    (xh) += ((((SItype) __m0 >> 31) & __m1)                            \
-            + (((SItype) __m1 >> 31) & __m0));                         \
-  } while (0)
-#define sdiv_qrnnd(q, r, n1, n0, d) \
-  do {                                                                 \
-    union {DItype __ll;                                                        \
-          struct {SItype __l, __h;} __i;                               \
-         } __xx;                                                       \
-    __xx.__i.__h = n1; __xx.__i.__l = n0;                              \
-    __asm__ ("ediv %3,%2,%0,%1"                                                \
-            : "=g" (q), "=g" (r)                                       \
-            : "g" (__n1n0.ll), "g" (d));                               \
-  } while (0)
-#endif /* __vax__ */
-
-#if defined (__z8000__) && W_TYPE_SIZE == 16
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  __asm__ ("add        %H1,%H5\n\tadc  %H0,%H3"                                \
-          : "=r" ((unsigned int)(sh)),                                 \
-            "=&r" ((unsigned int)(sl))                                 \
-          : "%0" ((unsigned int)(ah)),                                 \
-            "r" ((unsigned int)(bh)),                                  \
-            "%1" ((unsigned int)(al)),                                 \
-            "rQR" ((unsigned int)(bl)))
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  __asm__ ("sub        %H1,%H5\n\tsbc  %H0,%H3"                                \
-          : "=r" ((unsigned int)(sh)),                                 \
-            "=&r" ((unsigned int)(sl))                                 \
-          : "0" ((unsigned int)(ah)),                                  \
-            "r" ((unsigned int)(bh)),                                  \
-            "1" ((unsigned int)(al)),                                  \
-            "rQR" ((unsigned int)(bl)))
-#define umul_ppmm(xh, xl, m0, m1) \
-  do {                                                                 \
-    union {long int __ll;                                              \
-          struct {unsigned int __h, __l;} __i;                         \
-         } __xx;                                                       \
-    unsigned int __m0 = (m0), __m1 = (m1);                             \
-    __asm__ ("mult     %S0,%H3"                                        \
-            : "=r" (__xx.__i.__h),                                     \
-              "=r" (__xx.__i.__l)                                      \
-            : "%1" (__m0),                                             \
-              "rQR" (__m1));                                           \
-    (xh) = __xx.__i.__h; (xl) = __xx.__i.__l;                          \
-    (xh) += ((((signed int) __m0 >> 15) & __m1)                                \
-            + (((signed int) __m1 >> 15) & __m0));                     \
-  } while (0)
-#define umul_ppmm_off(xh, xl, m0, m1) \
-  do {                                                                 \
-    union {long int __ll;                                              \
-          struct {unsigned int __h, __l;} __i;                         \
-         } __xx;                                                       \
-    __asm__ ("mult     %S0,%H3"                                        \
-            : "=r" (__xx.__i.__h),                                     \
-              "=r" (__xx.__i.__l)                                      \
-            : "%1" (m0),                                               \
-              "rQR" (m1));                                             \
-    (xh) = __xx.__i.__h + ((((signed int) m0 >> 15) & m1)              \
-                          + (((signed int) m1 >> 15) & m0));           \
-    (xl) = __xx.__i.__l;                                               \
-  } while (0)
-#endif /* __z8000__ */
-
-#endif /* __GNUC__ */
-
-
-#if !defined (umul_ppmm) && defined (__umulsidi3)
-#define umul_ppmm(ph, pl, m0, m1) \
-  {                                                                    \
-    UDWtype __ll = __umulsidi3 (m0, m1);                               \
-    ph = (UWtype) (__ll >> W_TYPE_SIZE);                               \
-    pl = (UWtype) __ll;                                                        \
-  }
-#endif
-
-#if !defined (__umulsidi3)
-#define __umulsidi3(u, v) \
-  ({UWtype __hi, __lo;                                                 \
-    umul_ppmm (__hi, __lo, u, v);                                      \
-    ((UDWtype) __hi << W_TYPE_SIZE) | __lo; })
-#endif
-
-/* If this machine has no inline assembler, use C macros.  */
-
-#if !defined (add_ssaaaa)
-#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
-  do {                                                                 \
-    UWtype __x;                                                                \
-    __x = (al) + (bl);                                                 \
-    (sh) = (ah) + (bh) + (__x < (al));                                 \
-    (sl) = __x;                                                                \
-  } while (0)
-#endif
-
-#if !defined (sub_ddmmss)
-#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
-  do {                                                                 \
-    UWtype __x;                                                                \
-    __x = (al) - (bl);                                                 \
-    (sh) = (ah) - (bh) - (__x > (al));                                 \
-    (sl) = __x;                                                                \
-  } while (0)
-#endif
-
-#if !defined (umul_ppmm)
-#define umul_ppmm(w1, w0, u, v)                                                \
-  do {                                                                 \
-    UWtype __x0, __x1, __x2, __x3;                                     \
-    UHWtype __ul, __vl, __uh, __vh;                                    \
-                                                                       \
-    __ul = __ll_lowpart (u);                                           \
-    __uh = __ll_highpart (u);                                          \
-    __vl = __ll_lowpart (v);                                           \
-    __vh = __ll_highpart (v);                                          \
-                                                                       \
-    __x0 = (UWtype) __ul * __vl;                                       \
-    __x1 = (UWtype) __ul * __vh;                                       \
-    __x2 = (UWtype) __uh * __vl;                                       \
-    __x3 = (UWtype) __uh * __vh;                                       \
-                                                                       \
-    __x1 += __ll_highpart (__x0);/* this can't give carry */           \
-    __x1 += __x2;              /* but this indeed can */               \
-    if (__x1 < __x2)           /* did we get it? */                    \
-      __x3 += __ll_B;          /* yes, add it in the proper pos. */    \
-                                                                       \
-    (w1) = __x3 + __ll_highpart (__x1);                                        \
-    (w0) = (__ll_lowpart (__x1) << W_TYPE_SIZE/2) + __ll_lowpart (__x0);\
-  } while (0)
-#endif
-
-/* Define this unconditionally, so it can be used for debugging.  */
-#define __udiv_qrnnd_c(q, r, n1, n0, d) \
-  do {                                                                 \
-    UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m;                    \
-    __d1 = __ll_highpart (d);                                          \
-    __d0 = __ll_lowpart (d);                                           \
-                                                                       \
-    __r1 = (n1) % __d1;                                                        \
-    __q1 = (n1) / __d1;                                                        \
-    __m = (UWtype) __q1 * __d0;                                                \
-    __r1 = __r1 * __ll_B | __ll_highpart (n0);                         \
-    if (__r1 < __m)                                                    \
-      {                                                                        \
-       __q1--, __r1 += (d);                                            \
-       if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
-         if (__r1 < __m)                                               \
-           __q1--, __r1 += (d);                                        \
-      }                                                                        \
-    __r1 -= __m;                                                       \
-                                                                       \
-    __r0 = __r1 % __d1;                                                        \
-    __q0 = __r1 / __d1;                                                        \
-    __m = (UWtype) __q0 * __d0;                                                \
-    __r0 = __r0 * __ll_B | __ll_lowpart (n0);                          \
-    if (__r0 < __m)                                                    \
-      {                                                                        \
-       __q0--, __r0 += (d);                                            \
-       if (__r0 >= (d))                                                \
-         if (__r0 < __m)                                               \
-           __q0--, __r0 += (d);                                        \
-      }                                                                        \
-    __r0 -= __m;                                                       \
-                                                                       \
-    (q) = (UWtype) __q1 * __ll_B | __q0;                               \
-    (r) = __r0;                                                                \
-  } while (0)
-
-/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through
-   __udiv_w_sdiv (defined in libgcc or elsewhere).  */
-#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd)
-#define udiv_qrnnd(q, r, nh, nl, d) \
-  do {                                                                 \
-    UWtype __r;                                                                \
-    (q) = __udiv_w_sdiv (&__r, nh, nl, d);                             \
-    (r) = __r;                                                         \
-  } while (0)
-#endif
-
-/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c.  */
-#if !defined (udiv_qrnnd)
-#define UDIV_NEEDS_NORMALIZATION 1
-#define udiv_qrnnd __udiv_qrnnd_c
-#endif
-
-#if !defined (count_leading_zeros)
-extern
-#ifdef __STDC__
-const
-#endif
-unsigned char __clz_tab[];
-#define count_leading_zeros(count, x) \
-  do {                                                                 \
-    UWtype __xr = (x);                                                 \
-    UWtype __a;                                                                \
-                                                                       \
-    if (W_TYPE_SIZE <= 32)                                             \
-      {                                                                        \
-       __a = __xr < ((UWtype) 1 << 2*__BITS4)                          \
-         ? (__xr < ((UWtype) 1 << __BITS4) ? 0 : __BITS4)              \
-         : (__xr < ((UWtype) 1 << 3*__BITS4) ?  2*__BITS4 : 3*__BITS4);\
-      }                                                                        \
-    else                                                               \
-      {                                                                        \
-       for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8)                  \
-         if (((__xr >> __a) & 0xff) != 0)                              \
-           break;                                                      \
-      }                                                                        \
-                                                                       \
-    (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a);            \
-  } while (0)
-/* This version gives a well-defined value for zero. */
-#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
-#endif
-
-#if !defined (count_trailing_zeros)
-/* Define count_trailing_zeros using count_leading_zeros.  The latter might be
-   defined in asm, but if it is not, the C version above is good enough.  */
-#define count_trailing_zeros(count, x) \
-  do {                                                                 \
-    UWtype __ctz_x = (x);                                              \
-    UWtype __ctz_c;                                                    \
-    count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x);                 \
-    (count) = W_TYPE_SIZE - 1 - __ctz_c;                               \
-  } while (0)
-#endif
-
-#ifndef UDIV_NEEDS_NORMALIZATION
-#define UDIV_NEEDS_NORMALIZATION 0
-#endif
diff --git a/stdio/mp_clz_tab.c b/stdio/mp_clz_tab.c
deleted file mode 100644 (file)
index ed1b7ee..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-/* __clz_tab -- support for longlong.h
-
-Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc.
-
-This file is part of the GNU MP Library.
-
-The GNU MP Library is free software; you can redistribute it and/or modify
-it under the terms of the GNU Library General Public License as published by
-the Free Software Foundation; either version 2 of the License, or (at your
-option) any later version.
-
-The GNU MP Library is distributed in the hope that it will be useful, but
-WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
-License for more details.
-
-You should have received a copy of the GNU Library General Public License
-along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
-the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#if 0
-#include "gmp.h"
-#include "gmp-impl.h"
-#endif
-
-#if 0
-const
-#endif
- unsigned char __clz_tab[] =
-{
-  0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
-  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
-  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
-  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
-  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
-};
diff --git a/stdlib/fpioconst.c b/stdlib/fpioconst.c
new file mode 100644 (file)
index 0000000..8d0a823
--- /dev/null
@@ -0,0 +1,403 @@
+/* Table of MP integer constants 10^(2^i), used for floating point <-> decimal.
+Copyright (C) 1995 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#include "fpioconst.h"
+#include <gmp-mparam.h>                /* This defines BITS_PER_MP_LIMB.  */
+
+/* First page  : 32-bit limbs
+   Second page : 64-bit limbs
+   Last page   : table of pointers
+ */
+
+#if BITS_PER_MP_LIMB == 32
+
+/* Table with constants of 10^(2^i), i=0..12 for 32-bit limbs. */
+
+static const mp_limb _ten_p0[] =
+  { 0x00000000, 0x00000000, 0x0000000a };
+static const mp_limb _ten_p1[] =
+  { 0x00000000, 0x00000000, 0x00000064 };
+static const mp_limb _ten_p2[] =
+  { 0x00000000, 0x00000000, 0x00002710 };
+static const mp_limb _ten_p3[] =
+  { 0x00000000, 0x00000000, 0x05f5e100 };
+static const mp_limb _ten_p4[] =
+  { 0x00000000, 0x00000000, 0x6fc10000, 0x002386f2 };
+static const mp_limb _ten_p5[] =
+  { 0x00000000, 0x00000000, 0x00000000, 0x85acef81, 0x2d6d415b, 0x000004ee };
+static const mp_limb _ten_p6[] =
+  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0xbf6a1f01, 0x6e38ed64,
+    0xdaa797ed, 0xe93ff9f4, 0x00184f03 };
+static const mp_limb _ten_p7[] =
+  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x2e953e01, 0x03df9909, 0x0f1538fd, 0x2374e42f, 0xd3cff5ec, 0xc404dc08,
+    0xbccdb0da, 0xa6337f19, 0xe91f2603, 0x0000024e };
+static const mp_limb _ten_p8[] =
+  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x982e7c01, 0xbed3875b,
+    0xd8d99f72, 0x12152f87, 0x6bde50c6, 0xcf4a6e70, 0xd595d80f, 0x26b2716e,
+    0xadc666b0, 0x1d153624, 0x3c42d35a, 0x63ff540e, 0xcc5573c0, 0x65f9ef17,
+    0x55bc28f2, 0x80dcc7f7, 0xf46eeddc, 0x5fdcefce, 0x000553f7 };
+static const mp_limb _ten_p9[] =
+  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0xfc6cf801, 0x77f27267, 0x8f9546dc, 0x5d96976f, 0xb83a8a97, 0xc31e1ad9,
+    0x46c40513, 0x94e65747, 0xc88976c1, 0x4475b579, 0x28f8733b, 0xaa1da1bf,
+    0x703ed321, 0x1e25cfea, 0xb21a2f22, 0xbc51fb2e, 0x96e14f5d, 0xbfa3edac,
+    0x329c57ae, 0xe7fc7153, 0xc3fc0695, 0x85a91924, 0xf95f635e, 0xb2908ee0,
+    0x93abade4, 0x1366732a, 0x9449775c, 0x69be5b0e, 0x7343afac, 0xb099bc81,
+    0x45a71d46, 0xa2699748, 0x8cb07303, 0x8a0b1f13, 0x8cab8a97, 0xc1d238d9,
+    0x633415d4, 0x0000001c };
+static const mp_limb _ten_p10[] =
+  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2919f001, 0xf55b2b72,
+    0x6e7c215b, 0x1ec29f86, 0x991c4e87, 0x15c51a88, 0x140ac535, 0x4c7d1e1a,
+    0xcc2cd819, 0x0ed1440e, 0x896634ee, 0x7de16cfb, 0x1e43f61f, 0x9fce837d,
+    0x231d2b9c, 0x233e55c7, 0x65dc60d7, 0xf451218b, 0x1c5cd134, 0xc9635986,
+    0x922bbb9f, 0xa7e89431, 0x9f9f2a07, 0x62be695a, 0x8e1042c4, 0x045b7a74,
+    0x1abe1de3, 0x8ad822a5, 0xba34c411, 0xd814b505, 0xbf3fdeb3, 0x8fc51a16,
+    0xb1b896bc, 0xf56deeec, 0x31fb6bfd, 0xb6f4654b, 0x101a3616, 0x6b7595fb,
+    0xdc1a47fe, 0x80d98089, 0x80bda5a5, 0x9a202882, 0x31eb0f66, 0xfc8f1f90,
+    0x976a3310, 0xe26a7b7e, 0xdf68368a, 0x3ce3a0b8, 0x8e4262ce, 0x75a351a2,
+    0x6cb0b6c9, 0x44597583, 0x31b5653f, 0xc356e38a, 0x35faaba6, 0x0190fba0,
+    0x9fc4ed52, 0x88bc491b, 0x1640114a, 0x005b8041, 0xf4f3235e, 0x1e8d4649,
+    0x36a8de06, 0x73c55349, 0xa7e6bd2a, 0xc1a6970c, 0x47187094, 0xd2db49ef,
+    0x926c3f5b, 0xae6209d4, 0x2d433949, 0x34f4a3c6, 0xd4305d94, 0xd9d61a05,
+    0x00000325 };
+static const mp_limb _ten_p11[] =
+  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x1333e001, 0xe3096865, 0xb27d4d3f, 0x49e28dcf, 0xec2e4721, 0xee87e354,
+    0xb6067584, 0x368b8abb, 0xa5e5a191, 0x2ed56d55, 0xfd827773, 0xea50d142,
+    0x51b78db2, 0x98342c9e, 0xc850dabc, 0x866ed6f1, 0x19342c12, 0x92794987,
+    0xd2f869c2, 0x66912e4a, 0x71c7fd8f, 0x57a7842d, 0x235552eb, 0xfb7fedcc,
+    0xf3861ce0, 0x38209ce1, 0x9713b449, 0x34c10134, 0x8c6c54de, 0xa7a8289c,
+    0x2dbb6643, 0xe3cb64f3, 0x8074ff01, 0xe3892ee9, 0x10c17f94, 0xa8f16f92,
+    0xa8281ed6, 0x967abbb3, 0x5a151440, 0x9952fbed, 0x13b41e44, 0xafe609c3,
+    0xa2bca416, 0xf111821f, 0xfb1264b4, 0x91bac974, 0xd6c7d6ab, 0x8e48ff35,
+    0x4419bd43, 0xc4a65665, 0x685e5510, 0x33554c36, 0xab498697, 0x0dbd21fe,
+    0x3cfe491d, 0x982da466, 0xcbea4ca7, 0x9e110c7b, 0x79c56b8a, 0x5fc5a047,
+    0x84d80e2e, 0x1aa9f444, 0x730f203c, 0x6a57b1ab, 0xd752f7a6, 0x87a7dc62,
+    0x944545ff, 0x40660460, 0x77c1a42f, 0xc9ac375d, 0xe866d7ef, 0x744695f0,
+    0x81428c85, 0xa1fc6b96, 0xd7917c7b, 0x7bf03c19, 0x5b33eb41, 0x5715f791,
+    0x8f6cae5f, 0xdb0708fd, 0xb125ac8e, 0x785ce6b7, 0x56c6815b, 0x6f46eadb,
+    0x4eeebeee, 0x195355d8, 0xa244de3c, 0x9d7389c0, 0x53761abd, 0xcf99d019,
+    0xde9ec24b, 0x0d76ce39, 0x70beb181, 0x2e55ecee, 0xd5f86079, 0xf56d9d4b,
+    0xfb8886fb, 0x13ef5a83, 0x408f43c5, 0x3f3389a4, 0xfad37943, 0x58ccf45c,
+    0xf82df846, 0x415c7f3e, 0x2915e818, 0x8b3d5cf4, 0x6a445f27, 0xf8dbb57a,
+    0xca8f0070, 0x8ad803ec, 0xb2e87c34, 0x038f9245, 0xbedd8a6c, 0xc7c9dee0,
+    0x0eac7d56, 0x2ad3fa14, 0xe0de0840, 0xf775677c, 0xf1bd0ad5, 0x92be221e,
+    0x87fa1fb9, 0xce9d04a4, 0xd2c36fa9, 0x3f6f7024, 0xb028af62, 0x907855ee,
+    0xd83e49d6, 0x4efac5dc, 0xe7151aab, 0x77cd8c6b, 0x0a753b7d, 0x0af908b4,
+    0x8c983623, 0xe50f3027, 0x94222771, 0x1d08e2d6, 0xf7e928e6, 0xf2ee5ca6,
+    0x1b61b93c, 0x11eb962b, 0x9648b21c, 0xce2bcba1, 0x34f77154, 0x7bbebe30,
+    0xe526a319, 0x8ce329ac, 0xde4a74d2, 0xb5dc53d5, 0x0009e8b3 };
+static const mp_limb _ten_p12[] =
+  { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+    0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x2a67c001, 0xd4724e8d,
+    0x8efe7ae7, 0xf89a1e90, 0xef084117, 0x54e05154, 0x13b1bb51, 0x506be829,
+    0xfb29b172, 0xe599574e, 0xf0da6146, 0x806c0ed3, 0xb86ae5be, 0x45155e93,
+    0xc0591cc2, 0x7e1e7c34, 0x7c4823da, 0x1d1f4cce, 0x9b8ba1e8, 0xd6bfdf75,
+    0xe341be10, 0xc2dfae78, 0x016b67b2, 0x0f237f1a, 0x3dbeabcd, 0xaf6a2574,
+    0xcab3e6d7, 0x142e0e80, 0x61959127, 0x2c234811, 0x87009701, 0xcb4bf982,
+    0xf8169c84, 0x88052f8c, 0x68dde6d4, 0xbc131761, 0xff0b0905, 0x54ab9c41,
+    0x7613b224, 0x1a1c304e, 0x3bfe167b, 0x441c2d47, 0x4f6cea9c, 0x78f06181,
+    0xeb659fb8, 0x30c7ae41, 0x947e0d0e, 0xa1ebcad7, 0xd97d9556, 0x2130504d,
+    0x1a8309cb, 0xf2acd507, 0x3f8ec72a, 0xfd82373a, 0x95a842bc, 0x280f4d32,
+    0xf3618ac0, 0x811a4f04, 0x6dc3a5b4, 0xd3967a1b, 0x15b8c898, 0xdcfe388f,
+    0x454eb2a0, 0x8738b909, 0x10c4e996, 0x2bd9cc11, 0x3297cd0c, 0x655fec30,
+    0xae0725b1, 0xf4090ee8, 0x037d19ee, 0x398c6fed, 0x3b9af26b, 0xc994a450,
+    0xb5341743, 0x75a697b2, 0xac50b9c1, 0x3ccb5b92, 0xffe06205, 0xa8329761,
+    0xdfea5242, 0xeb83cadb, 0xe79dadf7, 0x3c20ee69, 0x1e0a6817, 0x7021b97a,
+    0x743074fa, 0x176ca776, 0x77fb8af6, 0xeca19beb, 0x92baf1de, 0xaf63b712,
+    0xde35c88b, 0xa4eb8f8c, 0xe137d5e9, 0x40b464a0, 0x87d1cde8, 0x42923bbd,
+    0xcd8f62ff, 0x2e2690f3, 0x095edc16, 0x59c89f1b, 0x1fa8fd5d, 0x5138753d,
+    0x390a2b29, 0x80152f18, 0x2dd8d925, 0xf984d83e, 0x7a872e74, 0xc19e1faf,
+    0xed4d542d, 0xecf9b5d0, 0x9462ea75, 0xc53c0adf, 0x0caea134, 0x37a2d439,
+    0xc8fa2e8a, 0x2181327e, 0x6e7bb827, 0x2d240820, 0x50be10e0, 0x5893d4b8,
+    0xab312bb9, 0x1f2b2322, 0x440b3f25, 0xbf627ede, 0x72dac789, 0xb608b895,
+    0x78787e2a, 0x86deb3f0, 0x6fee7aab, 0xbb9373f4, 0x27ecf57b, 0xf7d8b57e,
+    0xfca26a9f, 0x3d04e8d2, 0xc9df13cb, 0x3172826a, 0xcd9e8d7c, 0xa8fcd8e0,
+    0xb2c39497, 0x307641d9, 0x1cc939c1, 0x2608c4cf, 0xb6d1c7bf, 0x3d326a7e,
+    0xeeaf19e6, 0x8e13e25f, 0xee63302b, 0x2dfe6d97, 0x25971d58, 0xe41d3cc4,
+    0x0a80627c, 0xab8db59a, 0x9eea37c8, 0xe90afb77, 0x90ca19cf, 0x9ee3352c,
+    0x3613c850, 0xfe78d682, 0x788f6e50, 0x5b060904, 0xb71bd1a4, 0x3fecb534,
+    0xb32c450c, 0x20c33857, 0xa6e9cfda, 0x0239f4ce, 0x48497187, 0xa19adb95,
+    0xb492ed8a, 0x95aca6a8, 0x4dcd6cd9, 0xcf1b2350, 0xfbe8b12a, 0x1a67778c,
+    0x38eb3acc, 0xc32da383, 0xfb126ab1, 0xa03f40a8, 0xed5bf546, 0xe9ce4724,
+    0x4c4a74fd, 0x73a130d8, 0xd9960e2d, 0xa2ebd6c1, 0x94ab6feb, 0x6f233b7c,
+    0x49126080, 0x8e7b9a73, 0x4b8c9091, 0xd298f999, 0x35e836b5, 0xa96ddeff,
+    0x96119b31, 0x6b0dd9bc, 0xc6cc3f8d, 0x282566fb, 0x72b882e7, 0xd6769f3b,
+    0xa674343d, 0x00fc509b, 0xdcbf7789, 0xd6266a3f, 0xae9641fd, 0x4e89541b,
+    0x11953407, 0x53400d03, 0x8e0dd75a, 0xe5b53345, 0x108f19ad, 0x108b89bc,
+    0x41a4c954, 0xe03b2b63, 0x437b3d7f, 0x97aced8e, 0xcbd66670, 0x2c5508c2,
+    0x650ebc69, 0x5c4f2ef0, 0x904ff6bf, 0x9985a2df, 0x9faddd9e, 0x5ed8d239,
+    0x25585832, 0xe3e51cb9, 0x0ff4f1d4, 0x56c02d9a, 0x8c4ef804, 0xc1a08a13,
+    0x13fd01c8, 0xe6d27671, 0xa7c234f4, 0x9d0176cc, 0xd0d73df2, 0x4d8bfa89,
+    0x544f10cd, 0x2b17e0b2, 0xb70a5c7d, 0xfd86fe49, 0xdf373f41, 0x214495bb,
+    0x84e857fd, 0x00d313d5, 0x0496fcbe, 0xa4ba4744, 0xe8cac982, 0xaec29e6e,
+    0x87ec7038, 0x7000a519, 0xaeee333b, 0xff66e42c, 0x8afd6b25, 0x03b4f63b,
+    0xbd7991dc, 0x5ab8d9c7, 0x2ed4684e, 0x48741a6c, 0xaf06940d, 0x2fdc6349,
+    0xb03d7ecd, 0xe974996f, 0xac7867f9, 0x52ec8721, 0xbcdd9d4a, 0x8edd2d00,
+    0x3557de06, 0x41c759f8, 0x3956d4b9, 0xa75409f2, 0x123cd8a1, 0xb6100fab,
+    0x3e7b21e2, 0x2e8d623b, 0x92959da2, 0xbca35f77, 0x200c03a5, 0x35fcb457,
+    0x1bb6c6e4, 0xf74eb928, 0x3d5d0b54, 0x87cc1d21, 0x4964046f, 0x18ae4240,
+    0xd868b275, 0x8bd2b496, 0x1c5563f4, 0xc234d8f5, 0xf868e970, 0xf9151fff,
+    0xae7be4a2, 0x271133ee, 0xbb0fd922, 0x25254932, 0xa60a9fc0, 0x104bcd64,
+    0x30290145, 0x00000062 };
+
+/* This value is the index of the last array element.  */
+#define _LAST_POW10    12
+\f
+#elif BITS_PER_MP_LIMB == 64
+
+/* Table with constants of 10^(2^i), i=0..12 for 64-bit limbs. */
+
+static const mp_limb _ten_p0[] =
+  { 0x0000000000000000, 0x000000000000000a };
+static const mp_limb _ten_p1[] =
+  { 0x0000000000000000, 0x0000000000000064 };
+static const mp_limb _ten_p2[] =
+  { 0x0000000000000000, 0x0000000000002710 };
+static const mp_limb _ten_p3[] =
+  { 0x0000000000000000, 0x0000000005f5e100 };
+static const mp_limb _ten_p4[] =
+  { 0x0000000000000000, 0x002386f26fc10000 };
+static const mp_limb _ten_p5[] =
+  { 0x0000000000000000, 0x85acef8100000000, 0x000004ee2d6d415b };
+static const mp_limb _ten_p6[] =
+  { 0x0000000000000000, 0x0000000000000000, 0x6e38ed64bf6a1f01,
+    0xe93ff9f4daa797ed, 0x0000000000184f03 };
+static const mp_limb _ten_p7[] =
+  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x03df99092e953e01, 0x2374e42f0f1538fd, 0xc404dc08d3cff5ec,
+    0xa6337f19bccdb0da, 0x0000024ee91f2603 };
+static const mp_limb _ten_p8[] =
+  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0xbed3875b982e7c01,
+    0x12152f87d8d99f72, 0xcf4a6e706bde50c6, 0x26b2716ed595d80f,
+    0x1d153624adc666b0, 0x63ff540e3c42d35a, 0x65f9ef17cc5573c0,
+    0x80dcc7f755bc28f2, 0x5fdcefcef46eeddc, 0x00000000000553f7 };
+static const mp_limb _ten_p9[] =
+  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x77f27267fc6cf801, 0x5d96976f8f9546dc, 0xc31e1ad9b83a8a97,
+    0x94e6574746c40513, 0x4475b579c88976c1, 0xaa1da1bf28f8733b,
+    0x1e25cfea703ed321, 0xbc51fb2eb21a2f22, 0xbfa3edac96e14f5d,
+    0xe7fc7153329c57ae, 0x85a91924c3fc0695, 0xb2908ee0f95f635e,
+    0x1366732a93abade4, 0x69be5b0e9449775c, 0xb099bc817343afac,
+    0xa269974845a71d46, 0x8a0b1f138cb07303, 0xc1d238d98cab8a97,
+    0x0000001c633415d4 };
+static const mp_limb _ten_p10[] =
+  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0xf55b2b722919f001,
+    0x1ec29f866e7c215b, 0x15c51a88991c4e87, 0x4c7d1e1a140ac535,
+    0x0ed1440ecc2cd819, 0x7de16cfb896634ee, 0x9fce837d1e43f61f,
+    0x233e55c7231d2b9c, 0xf451218b65dc60d7, 0xc96359861c5cd134,
+    0xa7e89431922bbb9f, 0x62be695a9f9f2a07, 0x045b7a748e1042c4,
+    0x8ad822a51abe1de3, 0xd814b505ba34c411, 0x8fc51a16bf3fdeb3,
+    0xf56deeecb1b896bc, 0xb6f4654b31fb6bfd, 0x6b7595fb101a3616,
+    0x80d98089dc1a47fe, 0x9a20288280bda5a5, 0xfc8f1f9031eb0f66,
+    0xe26a7b7e976a3310, 0x3ce3a0b8df68368a, 0x75a351a28e4262ce,
+    0x445975836cb0b6c9, 0xc356e38a31b5653f, 0x0190fba035faaba6,
+    0x88bc491b9fc4ed52, 0x005b80411640114a, 0x1e8d4649f4f3235e,
+    0x73c5534936a8de06, 0xc1a6970ca7e6bd2a, 0xd2db49ef47187094,
+    0xae6209d4926c3f5b, 0x34f4a3c62d433949, 0xd9d61a05d4305d94,
+    0x0000000000000325 };
+static const mp_limb _ten_p11[] =
+  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0xe30968651333e001, 0x49e28dcfb27d4d3f, 0xee87e354ec2e4721,
+    0x368b8abbb6067584, 0x2ed56d55a5e5a191, 0xea50d142fd827773,
+    0x98342c9e51b78db2, 0x866ed6f1c850dabc, 0x9279498719342c12,
+    0x66912e4ad2f869c2, 0x57a7842d71c7fd8f, 0xfb7fedcc235552eb,
+    0x38209ce1f3861ce0, 0x34c101349713b449, 0xa7a8289c8c6c54de,
+    0xe3cb64f32dbb6643, 0xe3892ee98074ff01, 0xa8f16f9210c17f94,
+    0x967abbb3a8281ed6, 0x9952fbed5a151440, 0xafe609c313b41e44,
+    0xf111821fa2bca416, 0x91bac974fb1264b4, 0x8e48ff35d6c7d6ab,
+    0xc4a656654419bd43, 0x33554c36685e5510, 0x0dbd21feab498697,
+    0x982da4663cfe491d, 0x9e110c7bcbea4ca7, 0x5fc5a04779c56b8a,
+    0x1aa9f44484d80e2e, 0x6a57b1ab730f203c, 0x87a7dc62d752f7a6,
+    0x40660460944545ff, 0xc9ac375d77c1a42f, 0x744695f0e866d7ef,
+    0xa1fc6b9681428c85, 0x7bf03c19d7917c7b, 0x5715f7915b33eb41,
+    0xdb0708fd8f6cae5f, 0x785ce6b7b125ac8e, 0x6f46eadb56c6815b,
+    0x195355d84eeebeee, 0x9d7389c0a244de3c, 0xcf99d01953761abd,
+    0x0d76ce39de9ec24b, 0x2e55ecee70beb181, 0xf56d9d4bd5f86079,
+    0x13ef5a83fb8886fb, 0x3f3389a4408f43c5, 0x58ccf45cfad37943,
+    0x415c7f3ef82df846, 0x8b3d5cf42915e818, 0xf8dbb57a6a445f27,
+    0x8ad803ecca8f0070, 0x038f9245b2e87c34, 0xc7c9dee0bedd8a6c,
+    0x2ad3fa140eac7d56, 0xf775677ce0de0840, 0x92be221ef1bd0ad5,
+    0xce9d04a487fa1fb9, 0x3f6f7024d2c36fa9, 0x907855eeb028af62,
+    0x4efac5dcd83e49d6, 0x77cd8c6be7151aab, 0x0af908b40a753b7d,
+    0xe50f30278c983623, 0x1d08e2d694222771, 0xf2ee5ca6f7e928e6,
+    0x11eb962b1b61b93c, 0xce2bcba19648b21c, 0x7bbebe3034f77154,
+    0x8ce329ace526a319, 0xb5dc53d5de4a74d2, 0x000000000009e8b3 };
+static const mp_limb _ten_p12[] =
+  { 0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0x0000000000000000,
+    0x0000000000000000, 0x0000000000000000, 0xd4724e8d2a67c001,
+    0xf89a1e908efe7ae7, 0x54e05154ef084117, 0x506be82913b1bb51,
+    0xe599574efb29b172, 0x806c0ed3f0da6146, 0x45155e93b86ae5be,
+    0x7e1e7c34c0591cc2, 0x1d1f4cce7c4823da, 0xd6bfdf759b8ba1e8,
+    0xc2dfae78e341be10, 0x0f237f1a016b67b2, 0xaf6a25743dbeabcd,
+    0x142e0e80cab3e6d7, 0x2c23481161959127, 0xcb4bf98287009701,
+    0x88052f8cf8169c84, 0xbc13176168dde6d4, 0x54ab9c41ff0b0905,
+    0x1a1c304e7613b224, 0x441c2d473bfe167b, 0x78f061814f6cea9c,
+    0x30c7ae41eb659fb8, 0xa1ebcad7947e0d0e, 0x2130504dd97d9556,
+    0xf2acd5071a8309cb, 0xfd82373a3f8ec72a, 0x280f4d3295a842bc,
+    0x811a4f04f3618ac0, 0xd3967a1b6dc3a5b4, 0xdcfe388f15b8c898,
+    0x8738b909454eb2a0, 0x2bd9cc1110c4e996, 0x655fec303297cd0c,
+    0xf4090ee8ae0725b1, 0x398c6fed037d19ee, 0xc994a4503b9af26b,
+    0x75a697b2b5341743, 0x3ccb5b92ac50b9c1, 0xa8329761ffe06205,
+    0xeb83cadbdfea5242, 0x3c20ee69e79dadf7, 0x7021b97a1e0a6817,
+    0x176ca776743074fa, 0xeca19beb77fb8af6, 0xaf63b71292baf1de,
+    0xa4eb8f8cde35c88b, 0x40b464a0e137d5e9, 0x42923bbd87d1cde8,
+    0x2e2690f3cd8f62ff, 0x59c89f1b095edc16, 0x5138753d1fa8fd5d,
+    0x80152f18390a2b29, 0xf984d83e2dd8d925, 0xc19e1faf7a872e74,
+    0xecf9b5d0ed4d542d, 0xc53c0adf9462ea75, 0x37a2d4390caea134,
+    0x2181327ec8fa2e8a, 0x2d2408206e7bb827, 0x5893d4b850be10e0,
+    0x1f2b2322ab312bb9, 0xbf627ede440b3f25, 0xb608b89572dac789,
+    0x86deb3f078787e2a, 0xbb9373f46fee7aab, 0xf7d8b57e27ecf57b,
+    0x3d04e8d2fca26a9f, 0x3172826ac9df13cb, 0xa8fcd8e0cd9e8d7c,
+    0x307641d9b2c39497, 0x2608c4cf1cc939c1, 0x3d326a7eb6d1c7bf,
+    0x8e13e25feeaf19e6, 0x2dfe6d97ee63302b, 0xe41d3cc425971d58,
+    0xab8db59a0a80627c, 0xe90afb779eea37c8, 0x9ee3352c90ca19cf,
+    0xfe78d6823613c850, 0x5b060904788f6e50, 0x3fecb534b71bd1a4,
+    0x20c33857b32c450c, 0x0239f4cea6e9cfda, 0xa19adb9548497187,
+    0x95aca6a8b492ed8a, 0xcf1b23504dcd6cd9, 0x1a67778cfbe8b12a,
+    0xc32da38338eb3acc, 0xa03f40a8fb126ab1, 0xe9ce4724ed5bf546,
+    0x73a130d84c4a74fd, 0xa2ebd6c1d9960e2d, 0x6f233b7c94ab6feb,
+    0x8e7b9a7349126080, 0xd298f9994b8c9091, 0xa96ddeff35e836b5,
+    0x6b0dd9bc96119b31, 0x282566fbc6cc3f8d, 0xd6769f3b72b882e7,
+    0x00fc509ba674343d, 0xd6266a3fdcbf7789, 0x4e89541bae9641fd,
+    0x53400d0311953407, 0xe5b533458e0dd75a, 0x108b89bc108f19ad,
+    0xe03b2b6341a4c954, 0x97aced8e437b3d7f, 0x2c5508c2cbd66670,
+    0x5c4f2ef0650ebc69, 0x9985a2df904ff6bf, 0x5ed8d2399faddd9e,
+    0xe3e51cb925585832, 0x56c02d9a0ff4f1d4, 0xc1a08a138c4ef804,
+    0xe6d2767113fd01c8, 0x9d0176cca7c234f4, 0x4d8bfa89d0d73df2,
+    0x2b17e0b2544f10cd, 0xfd86fe49b70a5c7d, 0x214495bbdf373f41,
+    0x00d313d584e857fd, 0xa4ba47440496fcbe, 0xaec29e6ee8cac982,
+    0x7000a51987ec7038, 0xff66e42caeee333b, 0x03b4f63b8afd6b25,
+    0x5ab8d9c7bd7991dc, 0x48741a6c2ed4684e, 0x2fdc6349af06940d,
+    0xe974996fb03d7ecd, 0x52ec8721ac7867f9, 0x8edd2d00bcdd9d4a,
+    0x41c759f83557de06, 0xa75409f23956d4b9, 0xb6100fab123cd8a1,
+    0x2e8d623b3e7b21e2, 0xbca35f7792959da2, 0x35fcb457200c03a5,
+    0xf74eb9281bb6c6e4, 0x87cc1d213d5d0b54, 0x18ae42404964046f,
+    0x8bd2b496d868b275, 0xc234d8f51c5563f4, 0xf9151ffff868e970,
+    0x271133eeae7be4a2, 0x25254932bb0fd922, 0x104bcd64a60a9fc0,
+    0x0000006230290145 };
+
+/* This value is the index of the last array element.  */
+#define _LAST_POW10    12
+\f
+#else
+#  error "mp_limb size " BITS_PER_MP_LIMB "not accounted for"
+#endif
+
+
+/* Each of array variable above defines one mpn integer which is a power of 10.
+   This table points to those variables, indexed by the exponent.  */
+
+const struct mp_power _fpioconst_pow10[_LAST_POW10 + 1] =
+  {
+    { _ten_p0, sizeof (_ten_p0) / sizeof (_ten_p0[0]),         4,           },
+    { _ten_p1, sizeof (_ten_p1) / sizeof (_ten_p1[0]),         7,         4 },
+    { _ten_p2, sizeof (_ten_p2) / sizeof (_ten_p2[0]),         14,       10 },
+    { _ten_p3, sizeof (_ten_p3) / sizeof (_ten_p3[0]),         27,       24 },
+    { _ten_p4, sizeof (_ten_p4) / sizeof (_ten_p4[0]),         54,       50 },
+    { _ten_p5, sizeof (_ten_p5) / sizeof (_ten_p5[0]),         107,     103 },
+    { _ten_p6, sizeof (_ten_p6) / sizeof (_ten_p6[0]),         213,     210 },
+    { _ten_p7, sizeof (_ten_p7) / sizeof (_ten_p7[0]),         426,     422 },
+    { _ten_p8, sizeof (_ten_p8) / sizeof (_ten_p8[0]),         851,     848 },
+    { _ten_p9, sizeof (_ten_p9) / sizeof (_ten_p9[0]),         1701,   1698 },
+    { _ten_p10, sizeof (_ten_p10) / sizeof (_ten_p10[0]),      3402,   3399 },
+    { _ten_p11, sizeof (_ten_p11) / sizeof (_ten_p11[0]),      6804,   6800 },
+    { _ten_p12, sizeof (_ten_p12) / sizeof (_ten_p12[0]),      13607, 13604 }
+  };
+
+#if LAST_POW10 > _LAST_POW10
+#error "Need to expand 10^(2^i) table for i up to" LAST_POW10
+#endif
diff --git a/stdlib/fpioconst.h b/stdlib/fpioconst.h
new file mode 100644 (file)
index 0000000..8edbdcc
--- /dev/null
@@ -0,0 +1,52 @@
+/* Header file for constants used in floating point <-> decimal conversions.
+Copyright (C) 1995 Free Software Foundation, Inc.
+This file is part of the GNU C Library.
+
+The GNU C Library is free software; you can redistribute it and/or
+modify it under the terms of the GNU Library General Public License as
+published by the Free Software Foundation; either version 2 of the
+License, or (at your option) any later version.
+
+The GNU C Library is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public
+License along with the GNU C Library; see the file COPYING.LIB.  If
+not, write to the Free Software Foundation, Inc., 675 Mass Ave,
+Cambridge, MA 02139, USA.  */
+
+#ifndef _FPIOCONST_H
+#define        _FPIOCONST_H
+
+#include <float.h>
+#include "gmp.h"
+
+
+/* These values are used by __printf_fp, where they are noncritical (if the
+   value is not large enough, it will just be slower); and by
+   strtof/strtod/strtold, where it is critical (it's used for overflow
+   detection).
+
+   XXX These should be defined in <float.h>.  For the time being, we have the
+   IEEE754 values here.  */
+
+#define LDBL_MAX_10_EXP_LOG    12 /* = floor(log_2(LDBL_MAX_10_EXP)) */
+#define DBL_MAX_10_EXP_LOG     8 /* = floor(log_2(DBL_MAX_10_EXP)) */
+#define FLT_MAX_10_EXP_LOG     5 /* = floor(log_2(FLT_MAX_10_EXP)) */
+
+
+/* Table of powers of ten.  This is used by __printf_fp and by
+   strtof/strtod/strtold.  */
+struct mp_power
+  {
+    const mp_limb *array;      /* The array with the number representation. */
+    mp_size_t arraysize;       /* Size of the array.  */
+    int p_expo;                        /* Exponent of the number 10^(2^i).  */
+    int m_expo;                        /* Exponent of the number 10^-(2^i-1).  */
+  };
+extern const struct mp_power _fpioconst_pow10[LDBL_MAX_10_EXP_LOG + 1];
+
+
+#endif /* fpioconst.h */
diff --git a/stdlib/gmp-impl.h b/stdlib/gmp-impl.h
new file mode 100644 (file)
index 0000000..ccffe7b
--- /dev/null
@@ -0,0 +1,283 @@
+/* Include file for internal GNU MP types and definitions.
+
+Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Library General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
+License for more details.
+
+You should have received a copy of the GNU Library General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
+the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#if ! defined (alloca)
+#if defined (__GNUC__) || defined (__sparc__) || defined (sparc)
+#define alloca __builtin_alloca
+#endif
+#endif
+
+#ifndef NULL
+#define NULL 0L
+#endif
+
+#if ! defined (__GNUC__)
+#define inline                 /* Empty */
+void *alloca();
+#endif
+
+#define ABS(x) (x >= 0 ? x : -x)
+#define MIN(l,o) ((l) < (o) ? (l) : (o))
+#define MAX(h,i) ((h) > (i) ? (h) : (i))
+
+#include "gmp-mparam.h"
+/* #include "longlong.h" */
+
+#ifdef __STDC__
+void *malloc (size_t);
+void *realloc (void *, size_t);
+void free (void *);
+
+extern void *  (*_mp_allocate_func) (size_t);
+extern void *  (*_mp_reallocate_func) (void *, size_t, size_t);
+extern void    (*_mp_free_func) (void *, size_t);
+
+void *_mp_default_allocate (size_t);
+void *_mp_default_reallocate (void *, size_t, size_t);
+void _mp_default_free (void *, size_t);
+
+#else
+
+#define const                  /* Empty */
+#define signed                 /* Empty */
+
+void *malloc ();
+void *realloc ();
+void free ();
+
+extern void *  (*_mp_allocate_func) ();
+extern void *  (*_mp_reallocate_func) ();
+extern void    (*_mp_free_func) ();
+
+void *_mp_default_allocate ();
+void *_mp_default_reallocate ();
+void _mp_default_free ();
+#endif
+
+/* Copy NLIMBS *limbs* from SRC to DST.  */
+#define MPN_COPY_INCR(DST, SRC, NLIMBS) \
+  do {                                                                 \
+    mp_size_t __i;                                                     \
+    for (__i = 0; __i < (NLIMBS); __i++)                               \
+      (DST)[__i] = (SRC)[__i];                                         \
+  } while (0)
+#define MPN_COPY_DECR(DST, SRC, NLIMBS) \
+  do {                                                                 \
+    mp_size_t __i;                                                     \
+    for (__i = (NLIMBS) - 1; __i >= 0; __i--)                          \
+      (DST)[__i] = (SRC)[__i];                                         \
+  } while (0)
+#define MPN_COPY MPN_COPY_INCR
+
+/* Zero NLIMBS *limbs* AT DST.  */
+#define MPN_ZERO(DST, NLIMBS) \
+  do {                                                                 \
+    mp_size_t __i;                                                     \
+    for (__i = 0; __i < (NLIMBS); __i++)                               \
+      (DST)[__i] = 0;                                                  \
+  } while (0)
+
+#define MPN_NORMALIZE(DST, NLIMBS) \
+  do {                                                                 \
+    while (NLIMBS > 0)                                                 \
+      {                                                                        \
+       if ((DST)[(NLIMBS) - 1] != 0)                                   \
+         break;                                                        \
+       NLIMBS--;                                                       \
+      }                                                                        \
+  } while (0)
+#define MPN_NORMALIZE_NOT_ZERO(DST, NLIMBS) \
+  do {                                                                 \
+    while (1)                                                          \
+      {                                                                        \
+       if ((DST)[(NLIMBS) - 1] != 0)                                   \
+         break;                                                        \
+       NLIMBS--;                                                       \
+      }                                                                        \
+  } while (0)
+
+/*  Swap (mp_ptr, mp_size_t) (U, UL) with (V, VL)  */
+#define MPN_SWAP(u, l, v, m) \
+  do {                                                                 \
+    { mp_ptr _; _ = (u), (u) = (v), (v) = _;}                          \
+    { mp_size_t _; _ = (l), (l) = (m), (m) = _;}                       \
+  } while (0)
+
+/*  Return true iff the limb X has less bits than the limb Y.  */
+#define MPN_LESS_BITS_LIMB(x,y) ((x) < (y) && (x) < ((x) ^ (y)))
+
+/*  Return true iff (mp_ptr, mp_size_t) (U, UL) has less bits than (V, VL).  */
+#define MPN_LESS_BITS(u, l, v, m) \
+  ((l) < (m)                                                           \
+   || ((l) == (m) && (l) != 0 && MPN_LESS_BITS_LIMB ((u)[(l - 1)], (v)[(l) - 1])))
+
+/*  Return true iff (mp_ptr, mp_size_t) (U, UL) has more bits than (V, VL).  */
+#define MPN_MORE_BITS(u, l, v, m) MPN_LESS_BITS (v, m, u, l)
+
+/*  Perform twos complement on (mp_ptr, mp_size_t) (U, UL), 
+    putting result at (v, VL).  Precondition: U[0] != 0.  */
+#define MPN_COMPL_INCR(u, v, l)        \
+  do {                                                                 \
+    mp_size_t _ = 0;                                                   \
+    (u)[0] = -(v)[_];                                                  \
+    while (_++ < (l))                                                  \
+      (u)[_] = ~(v)[_];                                                        \
+  } while (0)
+#define MPN_COMPL MPN_COMPL_INCR
+
+/* Initialize the MP_INT X with space for NLIMBS limbs.
+   X should be a temporary variable, and it will be automatically
+   cleared out when the running function returns.
+   We use __x here to make it possible to accept both mpz_ptr and mpz_t
+   arguments.  */
+#define MPZ_TMP_INIT(X, NLIMBS) \
+  do {                                                                 \
+    mpz_ptr __x = (X);                                                 \
+    __x->alloc = (NLIMBS);                                             \
+    __x->d = (mp_ptr) alloca ((NLIMBS) * BYTES_PER_MP_LIMB);           \
+  } while (0)
+
+#define MPN_MUL_N_RECURSE(prodp, up, vp, size, tspace) \
+  do {                                                                 \
+    if ((size) < KARATSUBA_THRESHOLD)                                  \
+      ____mpn_mul_n_basecase (prodp, up, vp, size);                    \
+    else                                                               \
+      ____mpn_mul_n (prodp, up, vp, size, tspace);                     \
+  } while (0);
+#define MPN_SQR_N_RECURSE(prodp, up, size, tspace) \
+  do {                                                                 \
+    if ((size) < KARATSUBA_THRESHOLD)                                  \
+      ____mpn_sqr_n_basecase (prodp, up, size);                                \
+    else                                                               \
+      ____mpn_sqr_n (prodp, up, size, tspace);                         \
+  } while (0);
+
+/* Structure for conversion between internal binary format and
+   strings in base 2..36.  */
+struct bases
+{
+  /* Number of digits in the conversion base that always fits in
+     an mp_limb.  For example, for base 10 this is 10, since
+     2**32 = 4294967296 has ten digits.  */
+  int chars_per_limb;
+
+  /* log(2)/log(conversion_base) */
+  float chars_per_bit_exactly;
+
+  /* big_base is conversion_base**chars_per_limb, i.e. the biggest
+     number that fits a word, built by factors of conversion_base.
+     Exception: For 2, 4, 8, etc, big_base is log2(base), i.e. the
+     number of bits used to represent each digit in the base.  */
+  mp_limb big_base;
+
+  /* big_base_inverted is a BITS_PER_MP_LIMB bit approximation to
+     1/big_base, represented as a fixed-point number.  Instead of
+     dividing by big_base an application can choose to multiply
+     by big_base_inverted.  */
+  mp_limb big_base_inverted;
+};
+
+extern const struct bases __mp_bases[];
+extern mp_size_t __gmp_default_fp_limb_precision;
+
+/* Divide the two-limb number in (NH,,NL) by D, with DI being a 32 bit
+   approximation to (2**(2*BITS_PER_MP_LIMB))/D - (2**BITS_PER_MP_LIMB).
+   Put the quotient in Q and the remainder in R.  */
+#define udiv_qrnnd_preinv(q, r, nh, nl, d, di) \
+  do {                                                                 \
+    mp_limb _q, _ql, _r;                                               \
+    mp_limb _xh, _xl;                                                  \
+    umul_ppmm (_q, _ql, (nh), (di));                                   \
+    _q += (nh);                        /* DI is 2**BITS_PER_MP_LIMB too small */\
+    umul_ppmm (_xh, _xl, _q, (d));                                     \
+    sub_ddmmss (_xh, _r, (nh), (nl), _xh, _xl);                                \
+    if (_xh != 0)                                                      \
+      {                                                                        \
+       sub_ddmmss (_xh, _r, _xh, _r, 0, (d));                          \
+       _q += 1;                                                        \
+       if (_xh != 0)                                                   \
+         {                                                             \
+           sub_ddmmss (_xh, _r, _xh, _r, 0, (d));                      \
+           _q += 1;                                                    \
+         }                                                             \
+      }                                                                        \
+    if (_r >= (d))                                                     \
+      {                                                                        \
+       _r -= (d);                                                      \
+       _q += 1;                                                        \
+      }                                                                        \
+    (r) = _r;                                                          \
+    (q) = _q;                                                          \
+  } while (0)
+#define udiv_qrnnd_preinv2gen(q, r, nh, nl, d, di, dnorm, lgup) \
+  do {                                                                 \
+    mp_limb n2, n10, n1, nadj, q1;                                     \
+    mp_limb _xh, _xl;                                                  \
+    n2 = ((nh) << (BITS_PER_MP_LIMB - (lgup))) + ((nl) >> 1 >> (l - 1));\
+    n10 = (nl) << (BITS_PER_MP_LIMB - (lgup));                         \
+    n1 = ((mp_limb_signed) n10 >> (BITS_PER_MP_LIMB - 1));             \
+    nadj = n10 + (n1 & (dnorm));                                       \
+    umul_ppmm (_xh, _xl, di, n2 - n1);                                 \
+    add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj);                          \
+    q1 = ~(n2 + _xh);                                                  \
+    umul_ppmm (_xh, _xl, q1, d);                                       \
+    add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl);                           \
+    _xh -= (d);                                                                \
+    (r) = _xl + ((d) & _xh);                                           \
+    (q) = _xh - q1;                                                    \
+  } while (0)
+#define udiv_qrnnd_preinv2norm(q, r, nh, nl, d, di) \
+  do {                                                                 \
+    mp_limb n2, n10, n1, nadj, q1;                                     \
+    mp_limb _xh, _xl;                                                  \
+    n2 = (nh);                                                         \
+    n10 = (nl);                                                                \
+    n1 = ((mp_limb_signed) n10 >> (BITS_PER_MP_LIMB - 1));             \
+    nadj = n10 + (n1 & (d));                                           \
+    umul_ppmm (_xh, _xl, di, n2 - n1);                                 \
+    add_ssaaaa (_xh, _xl, _xh, _xl, 0, nadj);                          \
+    q1 = ~(n2 + _xh);                                                  \
+    umul_ppmm (_xh, _xl, q1, d);                                       \
+    add_ssaaaa (_xh, _xl, _xh, _xl, nh, nl);                           \
+    _xh -= (d);                                                                \
+    (r) = _xl + ((d) & _xh);                                           \
+    (q) = _xh - q1;                                                    \
+  } while (0)
+
+#if defined (__GNUC__)
+/* Define stuff for longlong.h asm macros.  */
+#if __GNUC_NEW_ATTR_MODE_SYNTAX
+typedef unsigned int UQItype   __attribute__ ((mode ("QI")));
+typedef         int SItype     __attribute__ ((mode ("SI")));
+typedef unsigned int USItype   __attribute__ ((mode ("SI")));
+typedef                 int DItype     __attribute__ ((mode ("DI")));
+typedef unsigned int UDItype   __attribute__ ((mode ("DI")));
+#else
+typedef unsigned int UQItype   __attribute__ ((mode (QI)));
+typedef         int SItype     __attribute__ ((mode (SI)));
+typedef unsigned int USItype   __attribute__ ((mode (SI)));
+typedef                 int DItype     __attribute__ ((mode (DI)));
+typedef unsigned int UDItype   __attribute__ ((mode (DI)));
+#endif
+#endif
+
+typedef mp_limb UWtype;
+typedef unsigned int UHWtype;
+#define W_TYPE_SIZE BITS_PER_MP_LIMB
diff --git a/stdlib/gmp.h b/stdlib/gmp.h
new file mode 100644 (file)
index 0000000..95c2f1b
--- /dev/null
@@ -0,0 +1,525 @@
+/* gmp.h -- Definitions for GNU multiple precision functions.
+
+Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Library General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
+License for more details.
+
+You should have received a copy of the GNU Library General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
+the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#ifndef __GMP_H__
+
+#ifndef __GNU_MP__
+#define __need_size_t
+#include <stddef.h>
+
+#ifdef __STDC__
+#define __gmp_const const
+#else
+#define __gmp_const
+#endif
+
+#ifdef __GNUC__
+#define __gmp_inline inline
+#else
+#define __gmp_inline
+#endif
+
+#ifdef _SHORT_LIMB
+typedef unsigned int           mp_limb;
+typedef int                    mp_limb_signed;
+#else
+typedef unsigned long int      mp_limb;
+typedef long int               mp_limb_signed;
+#endif
+
+typedef mp_limb *              mp_ptr;
+typedef __gmp_const mp_limb *  mp_srcptr;
+typedef int                    mp_size_t;
+typedef long int               mp_exp_t;
+
+#ifndef __MP_SMALL__
+typedef struct
+{
+  long int alloc;              /* Number of *limbs* allocated and pointed
+                                  to by the D field.  */
+  long int size;               /* abs(SIZE) is the number of limbs
+                                  the last field points to.  If SIZE
+                                  is negative this is a negative
+                                  number.  */
+  mp_limb *d;                  /* Pointer to the limbs.  */
+} __mpz_struct;
+#else
+typedef struct
+{
+  short int alloc;             /* Number of *limbs* allocated and pointed
+                                  to by the D field.  */
+  short int size;              /* abs(SIZE) is the number of limbs
+                                  the last field points to.  If SIZE
+                                  is negative this is a negative
+                                  number.  */
+  mp_limb *d;                  /* Pointer to the limbs.  */
+} __mpz_struct;
+#endif
+#endif /* __GNU_MP__ */
+
+/* User-visible types.  */
+typedef __mpz_struct MP_INT;
+typedef __mpz_struct mpz_t[1];
+
+/* Structure for rational numbers.  Zero is represented as 0/any, i.e.
+   the denominator is ignored.  Negative numbers have the sign in
+   the numerator.  */
+typedef struct
+{
+  __mpz_struct num;
+  __mpz_struct den;
+#if 0
+  long int num_alloc;          /* Number of limbs allocated
+                                  for the numerator.  */
+  long int num_size;           /* The absolute value of this field is the
+                                  length of the numerator; the sign is the
+                                  sign of the entire rational number.  */
+  mp_ptr num;                  /* Pointer to the numerator limbs.  */
+  long int den_alloc;          /* Number of limbs allocated
+                                  for the denominator.  */
+  long int den_size;           /* Length of the denominator.  (This field
+                                  should always be positive.) */
+  mp_ptr den;                  /* Pointer to the denominator limbs.  */
+#endif
+} __mpq_struct;
+
+typedef __mpq_struct MP_RAT;
+typedef __mpq_struct mpq_t[1];
+
+typedef struct
+{
+  mp_size_t alloc;             /* Number of *limbs* allocated and pointed
+                                  to by the D field.  */
+  mp_size_t prec;              /* Max precision, in number of `mp_limb's.
+                                  Set by mpf_init and modified by
+                                  mpf_set_prec.  */
+  mp_size_t size;              /* abs(SIZE) is the number of limbs
+                                  the last field points to.  If SIZE
+                                  is negative this is a negative
+                                  number.  */
+  mp_exp_t exp;                        /* Exponent, in the base of `mp_limb'.  */
+  mp_limb *d;                  /* Pointer to the limbs.  */
+} __mpf_struct;
+
+/* typedef __mpf_struct MP_FLOAT; */
+typedef __mpf_struct mpf_t[1];
+
+/* Types for function declarations in gmp files.  */
+/* ??? Should not pollute user name space ??? */
+typedef __gmp_const __mpz_struct *mpz_srcptr;
+typedef __mpz_struct *mpz_ptr;
+typedef __gmp_const __mpf_struct *mpf_srcptr;
+typedef __mpf_struct *mpf_ptr;
+typedef __gmp_const __mpq_struct *mpq_srcptr;
+typedef __mpq_struct *mpq_ptr;
+
+#ifdef __STDC__
+#define _PROTO(x) x
+#else
+#define _PROTO(x) ()
+#endif
+
+void mp_set_memory_functions _PROTO((void *(*) (size_t),
+                                    void *(*) (void *, size_t, size_t),
+                                    void (*) (void *, size_t)));
+
+/**************** Integer (i.e. Z) routines.  ****************/
+
+void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t));
+
+void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_clear _PROTO ((mpz_ptr));
+void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int));
+int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr));
+int mpz_cmp_si _PROTO ((mpz_srcptr, signed long int));
+int mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int));
+void mpz_com _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_div_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int));
+void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+/* signed */ long int mpz_get_si _PROTO ((mpz_srcptr));
+char *mpz_get_str _PROTO ((char *, int, mpz_srcptr));
+unsigned long int mpz_get_ui _PROTO ((mpz_srcptr));
+mp_limb mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t));
+mp_size_t mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr));
+void mpz_init _PROTO ((mpz_ptr));
+#ifdef FILE
+void mpz_inp_raw _PROTO ((mpz_ptr, FILE *));
+int mpz_inp_str _PROTO ((mpz_ptr, FILE *, int));
+#endif
+void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_init_set_si _PROTO ((mpz_ptr, signed long int));
+int mpz_init_set_str _PROTO ((mpz_ptr, const char *, int));
+void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int));
+void mpz_lcm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_mod_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr));
+#ifdef FILE
+void mpz_out_raw _PROTO ((FILE *, mpz_srcptr));
+void mpz_out_str _PROTO ((FILE *, int, mpz_srcptr));
+#endif
+int mpz_perfect_square_p _PROTO ((mpz_srcptr));
+mp_size_t mpz_popcount _PROTO ((mpz_srcptr));
+void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr));
+void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr));
+int mpz_probab_prime_p _PROTO ((mpz_srcptr, int));
+void mpz_random _PROTO ((mpz_ptr, mp_size_t));
+void mpz_random2 _PROTO ((mpz_ptr, mp_size_t));
+void mpz_set _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_set_si _PROTO ((mpz_ptr, signed long int));
+int mpz_set_str _PROTO ((mpz_ptr, const char *, int));
+void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int));
+size_t mpz_size _PROTO ((mpz_srcptr));
+size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int));
+void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr));
+void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr));
+void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int));
+
+void mpz_fdiv_q _PROTO((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_fdiv_q_ui _PROTO((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_fdiv_qr _PROTO((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_fdiv_qr_ui _PROTO((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_fdiv_r _PROTO((mpz_ptr, mpz_srcptr, mpz_srcptr));
+unsigned long int mpz_fdiv_r_ui _PROTO((mpz_ptr, mpz_srcptr, unsigned long int));
+unsigned long int mpz_fdiv_ui _PROTO((mpz_srcptr, unsigned long int));
+void mpz_tdiv_q _PROTO((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_q_ui _PROTO((mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_qr _PROTO((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_qr_ui _PROTO((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int));
+void mpz_tdiv_r _PROTO((mpz_ptr, mpz_srcptr, mpz_srcptr));
+void mpz_tdiv_r_ui _PROTO((mpz_ptr, mpz_srcptr, unsigned long int));
+
+/**************** Rational (i.e. Q) routines.  ****************/
+
+void mpq_init _PROTO ((mpq_ptr));
+void mpq_clear _PROTO ((mpq_ptr));
+void mpq_set _PROTO ((mpq_ptr, mpq_srcptr));
+void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int));
+void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int));
+void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr));
+void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr));
+int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr));
+void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr));
+void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr));
+void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr));
+void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr));
+void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr));
+
+/**************** Float (i.e. F) routines.  ****************/
+
+void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_clear _PROTO ((mpf_ptr));
+int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr));
+int mpf_cmp_si _PROTO ((mpf_srcptr, long int));
+int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int));
+void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_dump _PROTO ((mpf_srcptr));
+char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr));
+void mpf_init _PROTO ((mpf_ptr));
+void mpf_init2 _PROTO ((mpf_ptr, mp_size_t));
+#ifdef FILE
+void mpf_inp_str _PROTO ((mpf_ptr, FILE *, int));
+#endif
+void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_init_set_d _PROTO ((mpf_ptr, double));
+void mpf_init_set_si _PROTO ((mpf_ptr, long int));
+int mpf_init_set_str _PROTO ((mpf_ptr, char *, int));
+void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int));
+void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr));
+#ifdef FILE
+void mpf_out_str _PROTO ((mpf_ptr, int, size_t, FILE *));
+#endif
+void mpf_set _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_set_d _PROTO ((mpf_ptr, double));
+mp_size_t mpf_set_default_prec _PROTO ((mp_size_t));
+void mpf_set_si _PROTO ((mpf_ptr, long int));
+int mpf_set_str _PROTO ((mpf_ptr, const char *, int));
+void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int));
+size_t mpf_size _PROTO ((mpf_srcptr));
+void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr));
+void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int));
+void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr));
+void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int));
+void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr));
+
+/************ Low level positive-integer (i.e. N) routines.  ************/
+
+/* This is ugly, but we need to make usr calls reach the prefixed function.  */
+#define mpn_add_n      __mpn_add_n
+#define mpn_sub_n      __mpn_sub_n
+#define mpn_mul_1      __mpn_mul_1
+#define mpn_addmul_1   __mpn_addmul_1
+#define mpn_submul_1   __mpn_submul_1
+#define mpn_lshift     __mpn_lshift
+#define mpn_rshift     __mpn_rshift
+#define mpn_sub                __mpn_sub
+#define mpn_add                __mpn_add
+#define mpn_normal_size        __mpn_normal_size
+#define mpn_cmp                __mpn_cmp
+#define mpn_add_1      __mpn_add_1
+#define mpn_sub_1      __mpn_sub_1
+#define mpn_mul_n      __mpn_mul_n
+#define mpn_mul                __mpn_mul
+#define mpn_divmod     __mpn_divmod
+#define mpn_divmod_1   __mpn_divmod_1
+#define mpn_mod_1      __mpn_mod_1
+#define mpn_sqrt       __mpn_sqrt
+#define mpn_next_bit_set __mpn_next_bit_set
+#define mpn_popcount   __mpn_popcount
+#define mpn_hamdist    __mpn_hamdist
+#define mpn_random2    __mpn_random2
+#define mpn_set_str    __mpn_set_str
+#define mpn_get_str    __mpn_get_str
+#define mpn_gcd_1      __mpn_gcd_1
+
+mp_limb __mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb __mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb __mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t));
+void __mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t));
+mp_limb __mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb));
+mp_limb __mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb));
+mp_limb __mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb));
+mp_limb __mpn_divmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t));
+mp_limb __mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb));
+mp_limb __mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb));
+mp_limb __mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
+mp_limb __mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int));
+mp_size_t __mpn_sqrt _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t));
+int __mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
+mp_size_t __mpn_next_bit_set _PROTO ((mp_srcptr, mp_size_t));
+mp_size_t __mpn_popcount _PROTO ((mp_srcptr, mp_size_t));
+mp_size_t __mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t));
+void __mpn_random2 _PROTO ((mp_ptr, mp_size_t));
+mp_size_t __mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int));
+size_t __mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t));
+mp_limb __mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb));
+
+
+static __gmp_inline mp_limb
+#if __STDC__
+__mpn_add_1 (register mp_ptr res_ptr,
+            register mp_srcptr s1_ptr,
+            register mp_size_t s1_size,
+            register mp_limb s2_limb)
+#else
+__mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb)
+     register mp_ptr res_ptr;
+     register mp_srcptr s1_ptr;
+     register mp_size_t s1_size;
+     register mp_limb s2_limb;
+#endif
+{
+  register mp_limb x;
+
+  x = *s1_ptr++;
+  s2_limb = x + s2_limb;
+  *res_ptr++ = s2_limb;
+  if (s2_limb < x)
+    {
+      while (--s1_size != 0)
+       {
+         x = *s1_ptr++ + 1;
+         *res_ptr++ = x;
+         if (x != 0)
+           goto fin;
+       }
+
+      return 1;
+    }
+
+ fin:
+  if (res_ptr != s1_ptr)
+    {
+      mp_size_t i;
+      for (i = 0; i < s1_size - 1; i++)
+       res_ptr[i] = s1_ptr[i];
+    }
+  return 0;
+}
+
+static __gmp_inline mp_limb
+#if __STDC__
+__mpn_add (register mp_ptr res_ptr,
+          register mp_srcptr s1_ptr,
+          register mp_size_t s1_size,
+          register mp_srcptr s2_ptr,
+          register mp_size_t s2_size)
+#else
+__mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
+     register mp_ptr res_ptr;
+     register mp_srcptr s1_ptr;
+     register mp_size_t s1_size;
+     register mp_srcptr s2_ptr;
+     register mp_size_t s2_size;
+#endif
+{
+  mp_limb cy_limb = 0;
+
+  if (s2_size != 0)
+    cy_limb = __mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size);
+
+  if (s1_size - s2_size != 0)
+    cy_limb =  __mpn_add_1 (res_ptr + s2_size,
+                           s1_ptr + s2_size,
+                           s1_size - s2_size,
+                           cy_limb);
+  return cy_limb;
+}
+
+static __gmp_inline mp_limb
+#if __STDC__
+__mpn_sub_1 (register mp_ptr res_ptr,
+            register mp_srcptr s1_ptr,
+            register mp_size_t s1_size,
+            register mp_limb s2_limb)
+#else
+__mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb)
+     register mp_ptr res_ptr;
+     register mp_srcptr s1_ptr;
+     register mp_size_t s1_size;
+     register mp_limb s2_limb;
+#endif
+{
+  register mp_limb x;
+
+  x = *s1_ptr++;
+  s2_limb = x - s2_limb;
+  *res_ptr++ = s2_limb;
+  if (s2_limb > x)
+    {
+      while (--s1_size != 0)
+       {
+         x = *s1_ptr++;
+         *res_ptr++ = x - 1;
+         if (x != 0)
+           goto fin;
+       }
+
+      return 1;
+    }
+
+ fin:
+  if (res_ptr != s1_ptr)
+    {
+      mp_size_t i;
+      for (i = 0; i < s1_size - 1; i++)
+       res_ptr[i] = s1_ptr[i];
+    }
+  return 0;
+}
+
+static __gmp_inline mp_limb
+#if __STDC__
+__mpn_sub (register mp_ptr res_ptr,
+          register mp_srcptr s1_ptr,
+          register mp_size_t s1_size,
+          register mp_srcptr s2_ptr,
+          register mp_size_t s2_size)
+#else
+__mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size)
+     register mp_ptr res_ptr;
+     register mp_srcptr s1_ptr;
+     register mp_size_t s1_size;
+     register mp_srcptr s2_ptr;
+     register mp_size_t s2_size;
+#endif
+{
+  mp_limb cy_limb = 0;
+
+  if (s2_size != 0)
+    cy_limb = __mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size);
+
+  if (s1_size - s2_size != 0)
+    cy_limb =  __mpn_sub_1 (res_ptr + s2_size,
+                           s1_ptr + s2_size,
+                           s1_size - s2_size,
+                           cy_limb);
+  return cy_limb;
+}
+
+static __gmp_inline mp_size_t
+#if __STDC__
+__mpn_normal_size (mp_srcptr ptr, mp_size_t size)
+#else
+__mpn_normal_size (ptr, size)
+     mp_srcptr ptr;
+     mp_size_t size;
+#endif
+{
+  while (size)
+    {
+      size--;
+      if (ptr[size] != 0)
+       return size + 1;
+    }
+  return 0;
+}
+
+/* Compatibility with GMP 1.  */
+
+#define mpz_mdiv       mpz_fdiv_q
+#define mpz_mdivmod    mpz_fdiv_qr
+#define mpz_mmod       mpz_fdiv_r
+#define mpz_mdiv_ui    mpz_fdiv_q_ui
+#define mpz_mdivmod_ui(q,r,n,d) \
+  ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d))
+#define mpz_mmod_ui(r,n,d) \
+  ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d))
+/* ??? Before release...
+#define mpz_div_2exp   mpz_fdiv_q_2exp
+#define mpz_mod_2exp   mpz_fdiv_r_2exp
+*/
+
+/* Useful synonyms, but not quite compatible with GMP 1.  */
+#define mpz_div                mpz_fdiv_q
+#define mpz_divmod     mpz_fdiv_qr
+#define mpz_mod                mpz_fdiv_r
+#define mpz_div_ui     mpz_fdiv_q_ui
+#define mpz_divmod_ui  mpz_fdiv_qr_ui
+#define mpz_mod_ui     mpz_fdiv_r_ui
+
+
+#define __GNU_MP__ 2
+#define __GNU_MP_VERSION 2
+#define __GNU_MP_VERSION_MINOR -900 /* ??? */
+#define __GMP_H__
+#endif /* __GMP_H__ */
diff --git a/stdlib/longlong.h b/stdlib/longlong.h
new file mode 100644 (file)
index 0000000..97c469d
--- /dev/null
@@ -0,0 +1,1295 @@
+/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
+
+Copyright (C) 1991, 1992, 1993, 1994 Free Software Foundation, Inc.
+
+This file is free software; you can redistribute it and/or modify
+it under the terms of the GNU Library General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+
+This file is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
+License for more details.
+
+You should have received a copy of the GNU Library General Public License
+along with this file; see the file COPYING.LIB.  If not, write to
+the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* You have to define the following before including this file:
+
+   UWtype -- An unsigned type, default type for operations (typically a "word")
+   UHWtype -- An unsigned type, at least half the size of UWtype.
+   UDWtype -- An unsigned type, at least twice as large a UWtype
+   W_TYPE_SIZE -- size in bits of UWtype
+
+   SItype, USItype -- Signed and unsigned 32 bit types.
+   DItype, UDItype -- Signed and unsigned 64 bit types.
+
+   On a 32 bit machine UWtype should typically be USItype;
+   on a 64 bit machine, UWtype should typically be UDItype.
+*/
+
+#define __BITS4 (W_TYPE_SIZE / 4)
+#define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2))
+#define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1))
+#define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2))
+
+/* Define auxiliary asm macros.
+
+   1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two
+   UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype
+   word product in HIGH_PROD and LOW_PROD.
+
+   2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a
+   UDWtype product.  This is just a variant of umul_ppmm.
+
+   3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
+   denominator) divides a UDWtype, composed by the UWtype integers
+   HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient
+   in QUOTIENT and the remainder in REMAINDER.  HIGH_NUMERATOR must be less
+   than DENOMINATOR for correct operation.  If, in addition, the most
+   significant bit of DENOMINATOR must be 1, then the pre-processor symbol
+   UDIV_NEEDS_NORMALIZATION is defined to 1.
+
+   4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator,
+   denominator).  Like udiv_qrnnd but the numbers are signed.  The quotient
+   is rounded towards 0.
+
+   5) count_leading_zeros(count, x) counts the number of zero-bits from the
+   msb to the first non-zero bit in the UWtype X.  This is the number of
+   steps X needs to be shifted left to set the msb.  Undefined for X == 0,
+   unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value.
+
+   6) count_trailing_zeros(count, x) like count_leading_zeros, but counts
+   from the least significant end.
+
+   7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1,
+   high_addend_2, low_addend_2) adds two UWtype integers, composed by
+   HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2
+   respectively.  The result is placed in HIGH_SUM and LOW_SUM.  Overflow
+   (i.e. carry out) is not stored anywhere, and is lost.
+
+   8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend,
+   high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers,
+   composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and
+   LOW_SUBTRAHEND_2 respectively.  The result is placed in HIGH_DIFFERENCE
+   and LOW_DIFFERENCE.  Overflow (i.e. carry out) is not stored anywhere,
+   and is lost.
+
+   If any of these macros are left undefined for a particular CPU,
+   C macros are used.  */
+
+/* The CPUs come in alphabetical order below.
+
+   Please add support for more CPUs here, or improve the current support
+   for the CPUs below!  */
+
+#if defined (__GNUC__) && !defined (NO_ASM)
+
+/* We sometimes need to clobber "cc" with gcc2, but that would not be
+   understood by gcc1.  Use cpp to avoid major code duplication.  */
+#if __GNUC__ < 2
+#define __CLOBBER_CC
+#define __AND_CLOBBER_CC
+#else /* __GNUC__ >= 2 */
+#define __CLOBBER_CC : "cc"
+#define __AND_CLOBBER_CC , "cc"
+#endif /* __GNUC__ < 2 */
+
+#if (defined (__a29k__) || defined (___AM29K__)) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add %1,%4,%5
+       addc %0,%2,%3"                                                  \
+          : "=r" ((USItype)(sh)),                                      \
+           "=&r" ((USItype)(sl))                                       \
+          : "%r" ((USItype)(ah)),                                      \
+            "rI" ((USItype)(bh)),                                      \
+            "%r" ((USItype)(al)),                                      \
+            "rI" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub %1,%4,%5
+       subc %0,%2,%3"                                                  \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "r" ((USItype)(ah)),                                       \
+            "rI" ((USItype)(bh)),                                      \
+            "r" ((USItype)(al)),                                       \
+            "rI" ((USItype)(bl)))
+#define umul_ppmm(xh, xl, m0, m1) \
+  do {                                                                 \
+    USItype __m0 = (m0), __m1 = (m1);                                  \
+    __asm__ ("multiplu %0,%1,%2"                                       \
+            : "=r" ((USItype)(xl))                                     \
+            : "r" (__m0),                                              \
+              "r" (__m1));                                             \
+    __asm__ ("multmu %0,%1,%2"                                         \
+            : "=r" ((USItype)(xh))                                     \
+            : "r" (__m0),                                              \
+              "r" (__m1));                                             \
+  } while (0)
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  __asm__ ("dividu %0,%3,%4"                                           \
+          : "=r" ((USItype)(q)),                                       \
+            "=q" ((USItype)(r))                                        \
+          : "1" ((USItype)(n1)),                                       \
+            "r" ((USItype)(n0)),                                       \
+            "r" ((USItype)(d)))
+#define count_leading_zeros(count, x) \
+    __asm__ ("clz %0,%1"                                               \
+            : "=r" ((USItype)(count))                                  \
+            : "r" ((USItype)(x)))
+#endif /* __a29k__ */
+
+#if defined (__alpha__) && W_TYPE_SIZE == 64
+#define umul_ppmm(ph, pl, m0, m1) \
+  do {                                                                 \
+    UDItype __m0 = (m0), __m1 = (m1);                                  \
+    __asm__ ("umulh %r1,%2,%0"                                         \
+            : "=r" ((UDItype) ph)                                      \
+            : "%rJ" (__m0),                                            \
+              "rI" (__m1));                                            \
+    (pl) = __m0 * __m1;                                                        \
+  } while (0)
+#define UMUL_TIME 46
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  do { UDItype __r;                                                    \
+    (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));                                \
+    (r) = __r;                                                         \
+  } while (0)
+extern UDItype __udiv_qrnnd ();
+#define UDIV_TIME 220
+#endif
+
+#if defined (__arm__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("adds %1,%4,%5
+       adc %0,%2,%3"                                                   \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "%r" ((USItype)(ah)),                                      \
+            "rI" ((USItype)(bh)),                                      \
+            "%r" ((USItype)(al)),                                      \
+            "rI" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subs %1,%4,%5
+       sbc %0,%2,%3"                                                   \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "r" ((USItype)(ah)),                                       \
+            "rI" ((USItype)(bh)),                                      \
+            "r" ((USItype)(al)),                                       \
+            "rI" ((USItype)(bl)))
+#define umul_ppmm(xh, xl, a, b) \
+  __asm__ ("; Inlined umul_ppmm
+       mov     r0,%2 lsr 16
+       mov     r2,%3 lsr 16
+       bic     r1,%2,r0 lsl 16
+       bic     r2,%3,r2 lsl 16
+       mul     %1,r1,r2
+       mul     r2,r0,r2
+       mul     r1,%0,r1
+       mul     %0,r0,%0
+       adds    r1,r2,r1
+       addcs   %0,%0,0x10000
+       adds    %1,%1,r1 lsl 16
+       adc     %0,%0,r1 lsr 16"                                        \
+          : "=&r" ((USItype)(xh)),                                     \
+            "=r" ((USItype)(xl))                                       \
+          : "r" ((USItype)(a)),                                        \
+            "r" ((USItype)(b))                                         \
+          : "r0", "r1", "r2")
+#define UMUL_TIME 20
+#define UDIV_TIME 100
+#endif /* __arm__ */
+
+#if defined (__clipper__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+  ({union {UDItype __ll;                                               \
+          struct {USItype __l, __h;} __i;                              \
+         } __xx;                                                       \
+  __asm__ ("mulwux %2,%0"                                              \
+          : "=r" (__xx.__ll)                                           \
+          : "%0" ((USItype)(u)),                                       \
+            "r" ((USItype)(v)));                                       \
+  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
+#define smul_ppmm(w1, w0, u, v) \
+  ({union {DItype __ll;                                                        \
+          struct {SItype __l, __h;} __i;                               \
+         } __xx;                                                       \
+  __asm__ ("mulwx %2,%0"                                               \
+          : "=r" (__xx.__ll)                                           \
+          : "%0" ((SItype)(u)),                                        \
+            "r" ((SItype)(v)));                                        \
+  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
+#define __umulsidi3(u, v) \
+  ({UDItype __w;                                                       \
+    __asm__ ("mulwux %2,%0"                                            \
+            : "=r" (__w)                                               \
+            : "%0" ((USItype)(u)),                                     \
+              "r" ((USItype)(v)));                                     \
+    __w; })
+#endif /* __clipper__ */
+
+#if defined (__gmicro__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add.w %5,%1
+       addx %3,%0"                                                     \
+          : "=g" ((USItype)(sh)),                                      \
+            "=&g" ((USItype)(sl))                                      \
+          : "%0" ((USItype)(ah)),                                      \
+            "g" ((USItype)(bh)),                                       \
+            "%1" ((USItype)(al)),                                      \
+            "g" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub.w %5,%1
+       subx %3,%0"                                                     \
+          : "=g" ((USItype)(sh)),                                      \
+            "=&g" ((USItype)(sl))                                      \
+          : "0" ((USItype)(ah)),                                       \
+            "g" ((USItype)(bh)),                                       \
+            "1" ((USItype)(al)),                                       \
+            "g" ((USItype)(bl)))
+#define umul_ppmm(ph, pl, m0, m1) \
+  __asm__ ("mulx %3,%0,%1"                                             \
+          : "=g" ((USItype)(ph)),                                      \
+            "=r" ((USItype)(pl))                                       \
+          : "%0" ((USItype)(m0)),                                      \
+            "g" ((USItype)(m1)))
+#define udiv_qrnnd(q, r, nh, nl, d) \
+  __asm__ ("divx %4,%0,%1"                                             \
+          : "=g" ((USItype)(q)),                                       \
+            "=r" ((USItype)(r))                                        \
+          : "1" ((USItype)(nh)),                                       \
+            "0" ((USItype)(nl)),                                       \
+            "g" ((USItype)(d)))
+#define count_leading_zeros(count, x) \
+  __asm__ ("bsch/1 %1,%0"                                              \
+          : "=g" (count)                                               \
+          : "g" ((USItype)(x)),                                        \
+            "0" ((USItype)0))
+#endif
+
+#if defined (__hppa) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add %4,%5,%1
+       addc %2,%3,%0"                                                  \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "%rM" ((USItype)(ah)),                                     \
+            "rM" ((USItype)(bh)),                                      \
+            "%rM" ((USItype)(al)),                                     \
+            "rM" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub %4,%5,%1
+       subb %2,%3,%0"                                                  \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "rM" ((USItype)(ah)),                                      \
+            "rM" ((USItype)(bh)),                                      \
+            "rM" ((USItype)(al)),                                      \
+            "rM" ((USItype)(bl)))
+#if defined (_PA_RISC1_1)
+#define umul_ppmm(wh, wl, u, v) \
+  do {                                                                 \
+    union {UDItype __ll;                                               \
+          struct {USItype __h, __l;} __i;                              \
+         } __xx;                                                       \
+    __asm__ ("xmpyu %1,%2,%0"                                          \
+            : "=x" (__xx.__ll)                                         \
+            : "x" ((USItype)(u)),                                      \
+              "x" ((USItype)(v)));                                     \
+    (wh) = __xx.__i.__h;                                               \
+    (wl) = __xx.__i.__l;                                               \
+  } while (0)
+#define UMUL_TIME 8
+#define UDIV_TIME 60
+#else
+#define UMUL_TIME 40
+#define UDIV_TIME 80
+#endif
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  do { USItype __r;                                                    \
+    (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));                                \
+    (r) = __r;                                                         \
+  } while (0)
+extern USItype __udiv_qrnnd ();
+#define count_leading_zeros(count, x) \
+  do {                                                                 \
+    USItype __tmp;                                                     \
+    __asm__ (                                                          \
+       "ldi            1,%0
+       extru,=         %1,15,16,%%r0           ; Bits 31..16 zero?
+       extru,tr        %1,15,16,%1             ; No.  Shift down, skip add.
+       ldo             16(%0),%0               ; Yes.  Perform add.
+       extru,=         %1,23,8,%%r0            ; Bits 15..8 zero?
+       extru,tr        %1,23,8,%1              ; No.  Shift down, skip add.
+       ldo             8(%0),%0                ; Yes.  Perform add.
+       extru,=         %1,27,4,%%r0            ; Bits 7..4 zero?
+       extru,tr        %1,27,4,%1              ; No.  Shift down, skip add.
+       ldo             4(%0),%0                ; Yes.  Perform add.
+       extru,=         %1,29,2,%%r0            ; Bits 3..2 zero?
+       extru,tr        %1,29,2,%1              ; No.  Shift down, skip add.
+       ldo             2(%0),%0                ; Yes.  Perform add.
+       extru           %1,30,1,%1              ; Extract bit 1.
+       sub             %0,%1,%0                ; Subtract it.
+       " : "=r" (count), "=r" (__tmp) : "1" (x));                      \
+  } while (0)
+#endif
+
+#if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32
+#define umul_ppmm(xh, xl, m0, m1) \
+  do {                                                                 \
+    union {UDItype __ll;                                               \
+          struct {USItype __h, __l;} __i;                              \
+         } __xx;                                                       \
+    USItype __m0 = (m0), __m1 = (m1);                                  \
+    __asm__ ("mr %0,%3"                                                        \
+            : "=r" (__xx.__i.__h),                                     \
+              "=r" (__xx.__i.__l)                                      \
+            : "%1" (__m0),                                             \
+              "r" (__m1));                                             \
+    (xh) = __xx.__i.__h; (xl) = __xx.__i.__l;                          \
+    (xh) += ((((SItype) __m0 >> 31) & __m1)                            \
+            + (((SItype) __m1 >> 31) & __m0));                         \
+  } while (0)
+#define smul_ppmm(xh, xl, m0, m1) \
+  do {                                                                 \
+    union {DItype __ll;                                                        \
+          struct {USItype __h, __l;} __i;                              \
+         } __xx;                                                       \
+    __asm__ ("mr %0,%3"                                                        \
+            : "=r" (__xx.__i.__h),                                     \
+              "=r" (__xx.__i.__l)                                      \
+            : "%1" (m0),                                               \
+              "r" (m1));                                               \
+    (xh) = __xx.__i.__h; (xl) = __xx.__i.__l;                          \
+  } while (0)
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+  do {                                                                 \
+    union {DItype __ll;                                                        \
+          struct {USItype __h, __l;} __i;                              \
+         } __xx;                                                       \
+    __xx.__i.__h = n1; __xx.__i.__l = n0;                              \
+    __asm__ ("dr %0,%2"                                                        \
+            : "=r" (__xx.__ll)                                         \
+            : "0" (__xx.__ll), "r" (d));                               \
+    (q) = __xx.__i.__l; (r) = __xx.__i.__h;                            \
+  } while (0)
+#endif
+
+#if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("addl %5,%1
+       adcl %3,%0"                                                     \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "%0" ((USItype)(ah)),                                      \
+            "g" ((USItype)(bh)),                                       \
+            "%1" ((USItype)(al)),                                      \
+            "g" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subl %5,%1
+       sbbl %3,%0"                                                     \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "0" ((USItype)(ah)),                                       \
+            "g" ((USItype)(bh)),                                       \
+            "1" ((USItype)(al)),                                       \
+            "g" ((USItype)(bl)))
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("mull %3"                                                   \
+          : "=a" ((USItype)(w0)),                                      \
+            "=d" ((USItype)(w1))                                       \
+          : "%0" ((USItype)(u)),                                       \
+            "rm" ((USItype)(v)))
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  __asm__ ("divl %4"                                                   \
+          : "=a" ((USItype)(q)),                                       \
+            "=d" ((USItype)(r))                                        \
+          : "0" ((USItype)(n0)),                                       \
+            "1" ((USItype)(n1)),                                       \
+            "rm" ((USItype)(d)))
+#define count_leading_zeros(count, x) \
+  do {                                                                 \
+    USItype __cbtmp;                                                   \
+    __asm__ ("bsrl %1,%0"                                              \
+            : "=r" (__cbtmp) : "rm" ((USItype)(x)));                   \
+    (count) = __cbtmp ^ 31;                                            \
+  } while (0)
+#define count_trailing_zeros(count, x) \
+  __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x)))
+#define UMUL_TIME 40
+#define UDIV_TIME 40
+#endif /* 80x86 */
+
+#if defined (__i960__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+  ({union {UDItype __ll;                                               \
+          struct {USItype __l, __h;} __i;                              \
+         } __xx;                                                       \
+  __asm__ ("emul       %2,%1,%0"                                       \
+          : "=d" (__xx.__ll)                                           \
+          : "%dI" ((USItype)(u)),                                      \
+            "dI" ((USItype)(v)));                                      \
+  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
+#define __umulsidi3(u, v) \
+  ({UDItype __w;                                                       \
+    __asm__ ("emul     %2,%1,%0"                                       \
+            : "=d" (__w)                                               \
+            : "%dI" ((USItype)(u)),                                    \
+              "dI" ((USItype)(v)));                                    \
+    __w; })  
+#endif /* __i960__ */
+
+#if defined (__mc68000__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add%.l %5,%1
+       addx%.l %3,%0"                                                  \
+          : "=d" ((USItype)(sh)),                                      \
+            "=&d" ((USItype)(sl))                                      \
+          : "%0" ((USItype)(ah)),                                      \
+            "d" ((USItype)(bh)),                                       \
+            "%1" ((USItype)(al)),                                      \
+            "g" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub%.l %5,%1
+       subx%.l %3,%0"                                                  \
+          : "=d" ((USItype)(sh)),                                      \
+            "=&d" ((USItype)(sl))                                      \
+          : "0" ((USItype)(ah)),                                       \
+            "d" ((USItype)(bh)),                                       \
+            "1" ((USItype)(al)),                                       \
+            "g" ((USItype)(bl)))
+#if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("mulu%.l %3,%1:%0"                                          \
+          : "=d" ((USItype)(w0)),                                      \
+            "=d" ((USItype)(w1))                                       \
+          : "%0" ((USItype)(u)),                                       \
+            "dmi" ((USItype)(v)))
+#define UMUL_TIME 45
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  __asm__ ("divu%.l %4,%1:%0"                                          \
+          : "=d" ((USItype)(q)),                                       \
+            "=d" ((USItype)(r))                                        \
+          : "0" ((USItype)(n0)),                                       \
+            "1" ((USItype)(n1)),                                       \
+            "dmi" ((USItype)(d)))
+#define UDIV_TIME 90
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+  __asm__ ("divs%.l %4,%1:%0"                                          \
+          : "=d" ((USItype)(q)),                                       \
+            "=d" ((USItype)(r))                                        \
+          : "0" ((USItype)(n0)),                                       \
+            "1" ((USItype)(n1)),                                       \
+            "dmi" ((USItype)(d)))
+#define count_leading_zeros(count, x) \
+  __asm__ ("bfffo %1{%b2:%b2},%0"                                      \
+          : "=d" ((USItype)(count))                                    \
+          : "od" ((USItype)(x)), "n" (0))
+#else /* not mc68020 */
+#define umul_ppmm(xh, xl, a, b) \
+  __asm__ ("| Inlined umul_ppmm
+       move%.l %2,%/d0
+       move%.l %3,%/d1
+       move%.l %/d0,%/d2
+       swap    %/d0
+       move%.l %/d1,%/d3
+       swap    %/d1
+       move%.w %/d2,%/d4
+       mulu    %/d3,%/d4
+       mulu    %/d1,%/d2
+       mulu    %/d0,%/d3
+       mulu    %/d0,%/d1
+       move%.l %/d4,%/d0
+       eor%.w  %/d0,%/d0
+       swap    %/d0
+       add%.l  %/d0,%/d2
+       add%.l  %/d3,%/d2
+       jcc     1f
+       add%.l  #65536,%/d1
+1:     swap    %/d2
+       moveq   #0,%/d0
+       move%.w %/d2,%/d0
+       move%.w %/d4,%/d2
+       move%.l %/d2,%1
+       add%.l  %/d1,%/d0
+       move%.l %/d0,%0"                                                \
+          : "=g" ((USItype)(xh)),                                      \
+            "=g" ((USItype)(xl))                                       \
+          : "g" ((USItype)(a)),                                        \
+            "g" ((USItype)(b))                                         \
+          : "d0", "d1", "d2", "d3", "d4")
+#define UMUL_TIME 100
+#define UDIV_TIME 400
+#endif /* not mc68020 */
+#endif /* mc68000 */
+
+#if defined (__m88000__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("addu.co %1,%r4,%r5
+       addu.ci %0,%r2,%r3"                                             \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "%rJ" ((USItype)(ah)),                                     \
+            "rJ" ((USItype)(bh)),                                      \
+            "%rJ" ((USItype)(al)),                                     \
+            "rJ" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subu.co %1,%r4,%r5
+       subu.ci %0,%r2,%r3"                                             \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "rJ" ((USItype)(ah)),                                      \
+            "rJ" ((USItype)(bh)),                                      \
+            "rJ" ((USItype)(al)),                                      \
+            "rJ" ((USItype)(bl)))
+#define count_leading_zeros(count, x) \
+  do {                                                                 \
+    USItype __cbtmp;                                                   \
+    __asm__ ("ff1 %0,%1"                                               \
+            : "=r" (__cbtmp)                                           \
+            : "r" ((USItype)(x)));                                     \
+    (count) = __cbtmp ^ 31;                                            \
+  } while (0)
+#if defined (__mc88110__)
+#define umul_ppmm(wh, wl, u, v) \
+  do {                                                                 \
+    union {UDItype __ll;                                               \
+          struct {USItype __h, __l;} __i;                              \
+         } __xx;                                                       \
+    __asm__ ("mulu.d   %0,%1,%2"                                       \
+            : "=r" (__xx.__ll)                                         \
+            : "r" ((USItype)(u)),                                      \
+              "r" ((USItype)(v)));                                     \
+    (wh) = __xx.__i.__h;                                               \
+    (wl) = __xx.__i.__l;                                               \
+  } while (0)
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  ({union {UDItype __ll;                                               \
+          struct {USItype __h, __l;} __i;                              \
+         } __xx;                                                       \
+  USItype __q;                                                         \
+  __xx.__i.__h = (n1); __xx.__i.__l = (n0);                            \
+  __asm__ ("divu.d %0,%1,%2"                                           \
+          : "=r" (__q)                                                 \
+          : "r" (__xx.__ll),                                           \
+            "r" ((USItype)(d)));                                       \
+  (r) = (n0) - __q * (d); (q) = __q; })
+#define UMUL_TIME 5
+#define UDIV_TIME 25
+#else
+#define UMUL_TIME 17
+#define UDIV_TIME 150
+#endif /* __mc88110__ */
+#endif /* __m88000__ */
+
+#if defined (__mips__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("multu %2,%3
+       mflo %0
+       mfhi %1"                                                        \
+          : "=d" ((USItype)(w0)),                                      \
+            "=d" ((USItype)(w1))                                       \
+          : "d" ((USItype)(u)),                                        \
+            "d" ((USItype)(v)))
+#define UMUL_TIME 10
+#define UDIV_TIME 100
+#endif /* __mips__ */
+
+#if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("dmultu %2,%3
+       mflo %0
+       mfhi %1"                                                        \
+          : "=d" ((UDItype)(w0)),                                      \
+            "=d" ((UDItype)(w1))                                       \
+          : "d" ((UDItype)(u)),                                        \
+            "d" ((UDItype)(v)))
+#define UMUL_TIME 10
+#define UDIV_TIME 100
+#endif /* __mips__ */
+
+#if defined (__ns32000__) && W_TYPE_SIZE == 32
+#define umul_ppmm(w1, w0, u, v) \
+  ({union {UDItype __ll;                                               \
+          struct {USItype __l, __h;} __i;                              \
+         } __xx;                                                       \
+  __asm__ ("meid %2,%0"                                                        \
+          : "=g" (__xx.__ll)                                           \
+          : "%0" ((USItype)(u)),                                       \
+            "g" ((USItype)(v)));                                       \
+  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
+#define __umulsidi3(u, v) \
+  ({UDItype __w;                                                       \
+    __asm__ ("meid %2,%0"                                              \
+            : "=g" (__w)                                               \
+            : "%0" ((USItype)(u)),                                     \
+              "g" ((USItype)(v)));                                     \
+    __w; })
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  ({union {UDItype __ll;                                               \
+          struct {USItype __l, __h;} __i;                              \
+         } __xx;                                                       \
+  __xx.__i.__h = (n1); __xx.__i.__l = (n0);                            \
+  __asm__ ("deid %2,%0"                                                        \
+          : "=g" (__xx.__ll)                                           \
+          : "0" (__xx.__ll),                                           \
+            "g" ((USItype)(d)));                                       \
+  (r) = __xx.__i.__l; (q) = __xx.__i.__h; })
+#define count_trailing_zeros(count,x) \
+  do {
+    __asm__ ("ffsd     %2,%0"                                          \
+            : "=r" ((USItype) (count))                                 \
+            : "0" ((USItype) 0),                                       \
+              "r" ((USItype) (x)));                                    \
+  } while (0)
+#endif /* __ns32000__ */
+
+#if (defined (__powerpc__) || defined (___IBMR2__)) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  do {                                                                 \
+    if (__builtin_constant_p (bh) && (bh) == 0)                                \
+      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2"          \
+            : "=r" ((USItype)(sh)),                                    \
+              "=&r" ((USItype)(sl))                                    \
+            : "%r" ((USItype)(ah)),                                    \
+              "%r" ((USItype)(al)),                                    \
+              "rI" ((USItype)(bl)));                                   \
+    else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0)         \
+      __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2"          \
+            : "=r" ((USItype)(sh)),                                    \
+              "=&r" ((USItype)(sl))                                    \
+            : "%r" ((USItype)(ah)),                                    \
+              "%r" ((USItype)(al)),                                    \
+              "rI" ((USItype)(bl)));                                   \
+    else                                                               \
+      __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3"         \
+            : "=r" ((USItype)(sh)),                                    \
+              "=&r" ((USItype)(sl))                                    \
+            : "%r" ((USItype)(ah)),                                    \
+              "r" ((USItype)(bh)),                                     \
+              "%r" ((USItype)(al)),                                    \
+              "rI" ((USItype)(bl)));                                   \
+  } while (0)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  do {                                                                 \
+    if (__builtin_constant_p (ah) && (ah) == 0)                                \
+      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2"              \
+              : "=r" ((USItype)(sh)),                                  \
+                "=&r" ((USItype)(sl))                                  \
+              : "r" ((USItype)(bh)),                                   \
+                "rI" ((USItype)(al)),                                  \
+                "r" ((USItype)(bl)));                                  \
+    else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0)         \
+      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2"              \
+              : "=r" ((USItype)(sh)),                                  \
+                "=&r" ((USItype)(sl))                                  \
+              : "r" ((USItype)(bh)),                                   \
+                "rI" ((USItype)(al)),                                  \
+                "r" ((USItype)(bl)));                                  \
+    else if (__builtin_constant_p (bh) && (bh) == 0)                   \
+      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2"                \
+              : "=r" ((USItype)(sh)),                                  \
+                "=&r" ((USItype)(sl))                                  \
+              : "r" ((USItype)(ah)),                                   \
+                "rI" ((USItype)(al)),                                  \
+                "r" ((USItype)(bl)));                                  \
+    else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0)         \
+      __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2"                \
+              : "=r" ((USItype)(sh)),                                  \
+                "=&r" ((USItype)(sl))                                  \
+              : "r" ((USItype)(ah)),                                   \
+                "rI" ((USItype)(al)),                                  \
+                "r" ((USItype)(bl)));                                  \
+    else                                                               \
+      __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2"     \
+              : "=r" ((USItype)(sh)),                                  \
+                "=&r" ((USItype)(sl))                                  \
+              : "r" ((USItype)(ah)),                                   \
+                "r" ((USItype)(bh)),                                   \
+                "rI" ((USItype)(al)),                                  \
+                "r" ((USItype)(bl)));                                  \
+  } while (0)
+#define count_leading_zeros(count, x) \
+  __asm__ ("{cntlz|cntlzw} %0,%1"                                      \
+          : "=r" ((USItype)(count))                                    \
+          : "r" ((USItype)(x)))
+#if defined (__powerpc__)
+#define umul_ppmm(ph, pl, m0, m1) \
+  do {                                                                 \
+    USItype __m0 = (m0), __m1 = (m1);                                  \
+    __asm__ ("mulhwu %0,%1,%2"                                         \
+            : "=r" ((USItype) ph)                                      \
+            : "%r" (__m0),                                             \
+              "r" (__m1));                                             \
+    (pl) = __m0 * __m1;                                                        \
+  } while (0)
+#define UMUL_TIME 15
+#define smul_ppmm(ph, pl, m0, m1) \
+  do {                                                                 \
+    SItype __m0 = (m0), __m1 = (m1);                                   \
+    __asm__ ("mulhw %0,%1,%2"                                          \
+            : "=r" ((SItype) ph)                                       \
+            : "%r" (__m0),                                             \
+              "r" (__m1));                                             \
+    (pl) = __m0 * __m1;                                                        \
+  } while (0)
+#define SMUL_TIME 14
+#define UDIV_TIME 120
+#else
+#define umul_ppmm(xh, xl, m0, m1) \
+  do {                                                                 \
+    USItype __m0 = (m0), __m1 = (m1);                                  \
+    __asm__ ("mul %0,%2,%3"                                            \
+            : "=r" ((USItype)(xh)),                                    \
+              "=q" ((USItype)(xl))                                     \
+            : "r" (__m0),                                              \
+              "r" (__m1));                                             \
+    (xh) += ((((SItype) __m0 >> 31) & __m1)                            \
+            + (((SItype) __m1 >> 31) & __m0));                         \
+  } while (0)
+#define UMUL_TIME 8
+#define smul_ppmm(xh, xl, m0, m1) \
+  __asm__ ("mul %0,%2,%3"                                              \
+          : "=r" ((SItype)(xh)),                                       \
+            "=q" ((SItype)(xl))                                        \
+          : "r" (m0),                                                  \
+            "r" (m1))
+#define SMUL_TIME 4
+#define sdiv_qrnnd(q, r, nh, nl, d) \
+  __asm__ ("div %0,%2,%4"                                              \
+          : "=r" ((SItype)(q)), "=q" ((SItype)(r))                     \
+          : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d)))
+#define UDIV_TIME 100
+#endif
+#endif /* Power architecture variants.  */
+
+#if defined (__pyr__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("addw       %5,%1
+       addwc   %3,%0"                                                  \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "%0" ((USItype)(ah)),                                      \
+            "g" ((USItype)(bh)),                                       \
+            "%1" ((USItype)(al)),                                      \
+            "g" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subw       %5,%1
+       subwb   %3,%0"                                                  \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "0" ((USItype)(ah)),                                       \
+            "g" ((USItype)(bh)),                                       \
+            "1" ((USItype)(al)),                                       \
+            "g" ((USItype)(bl)))
+/* This insn doesn't work on ancient pyramids.  */
+#define umul_ppmm(w1, w0, u, v) \
+  ({union {UDItype __ll;                                               \
+          struct {USItype __h, __l;} __i;                              \
+         } __xx;                                                       \
+  __xx.__i.__l = u;                                                    \
+  __asm__ ("uemul %3,%0"                                               \
+          : "=r" (__xx.__i.__h),                                       \
+            "=r" (__xx.__i.__l)                                        \
+          : "1" (__xx.__i.__l),                                        \
+            "g" ((USItype)(v)));                                       \
+  (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;})
+#endif /* __pyr__ */
+
+#if defined (__ibm032__) /* RT/ROMP */  && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("a %1,%5
+       ae %0,%3"                                                       \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "%0" ((USItype)(ah)),                                      \
+            "r" ((USItype)(bh)),                                       \
+            "%1" ((USItype)(al)),                                      \
+            "r" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("s %1,%5
+       se %0,%3"                                                       \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "0" ((USItype)(ah)),                                       \
+            "r" ((USItype)(bh)),                                       \
+            "1" ((USItype)(al)),                                       \
+            "r" ((USItype)(bl)))
+#define umul_ppmm(ph, pl, m0, m1) \
+  do {                                                                 \
+    USItype __m0 = (m0), __m1 = (m1);                                  \
+    __asm__ (                                                          \
+       "s      r2,r2
+       mts     r10,%2
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       m       r2,%3
+       cas     %0,r2,r0
+       mfs     r10,%1"                                                 \
+            : "=r" ((USItype)(ph)),                                    \
+              "=r" ((USItype)(pl))                                     \
+            : "%r" (__m0),                                             \
+               "r" (__m1)                                              \
+            : "r2");                                                   \
+    (ph) += ((((SItype) __m0 >> 31) & __m1)                            \
+            + (((SItype) __m1 >> 31) & __m0));                         \
+  } while (0)
+#define UMUL_TIME 20
+#define UDIV_TIME 200
+#define count_leading_zeros(count, x) \
+  do {                                                                 \
+    if ((x) >= 0x10000)                                                        \
+      __asm__ ("clz    %0,%1"                                          \
+              : "=r" ((USItype)(count))                                \
+              : "r" ((USItype)(x) >> 16));                             \
+    else                                                               \
+      {                                                                        \
+       __asm__ ("clz   %0,%1"                                          \
+                : "=r" ((USItype)(count))                              \
+                : "r" ((USItype)(x)));                                 \
+       (count) += 16;                                                  \
+      }                                                                        \
+  } while (0)
+#endif
+
+#if defined (__sparc__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("addcc %r4,%5,%1
+       addx %r2,%3,%0"                                                 \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "%rJ" ((USItype)(ah)),                                     \
+            "rI" ((USItype)(bh)),                                      \
+            "%rJ" ((USItype)(al)),                                     \
+            "rI" ((USItype)(bl))                                       \
+          __CLOBBER_CC)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subcc %r4,%5,%1
+       subx %r2,%3,%0"                                                 \
+          : "=r" ((USItype)(sh)),                                      \
+            "=&r" ((USItype)(sl))                                      \
+          : "rJ" ((USItype)(ah)),                                      \
+            "rI" ((USItype)(bh)),                                      \
+            "rJ" ((USItype)(al)),                                      \
+            "rI" ((USItype)(bl))                                       \
+          __CLOBBER_CC)
+#if defined (__sparc_v8__)
+/* Don't match immediate range because, 1) it is not often useful,
+   2) the 'I' flag thinks of the range as a 13 bit signed interval,
+   while we want to match a 13 bit interval, sign extended to 32 bits,
+   but INTERPRETED AS UNSIGNED.  */
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("umul %2,%3,%1;rd %%y,%0"                                   \
+          : "=r" ((USItype)(w1)),                                      \
+            "=r" ((USItype)(w0))                                       \
+          : "r" ((USItype)(u)),                                        \
+            "r" ((USItype)(v)))
+#define UMUL_TIME 5
+/* We might want to leave this undefined for `SuperSPARC (tm)' since
+   its implementation is crippled and often traps.  */
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  __asm__ ("mov %2,%%y;nop;nop;nop;udiv %3,%4,%0;umul %0,%4,%1;sub %3,%1,%1"\
+          : "=&r" ((USItype)(q)),                                      \
+            "=&r" ((USItype)(r))                                       \
+          : "r" ((USItype)(n1)),                                       \
+            "r" ((USItype)(n0)),                                       \
+            "r" ((USItype)(d)))
+#define UDIV_TIME 25
+#else
+#if defined (__sparclite__)
+/* This has hardware multiply but not divide.  It also has two additional
+   instructions scan (ffs from high bit) and divscc.  */
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("umul %2,%3,%1;rd %%y,%0"                                   \
+          : "=r" ((USItype)(w1)),                                      \
+            "=r" ((USItype)(w0))                                       \
+          : "r" ((USItype)(u)),                                        \
+            "r" ((USItype)(v)))
+#define UMUL_TIME 5
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  __asm__ ("! Inlined udiv_qrnnd
+       wr      %%g0,%2,%%y     ! Not a delayed write for sparclite
+       tst     %%g0
+       divscc  %3,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%%g1
+       divscc  %%g1,%4,%0
+       rd      %%y,%1
+       bl,a 1f
+       add     %1,%4,%1
+1:     ! End of inline udiv_qrnnd"                                     \
+          : "=r" ((USItype)(q)),                                       \
+            "=r" ((USItype)(r))                                        \
+          : "r" ((USItype)(n1)),                                       \
+            "r" ((USItype)(n0)),                                       \
+            "rI" ((USItype)(d))                                        \
+          : "%g1" __AND_CLOBBER_CC)
+#define UDIV_TIME 37
+#define count_leading_zeros(count, x) \
+  __asm__ ("scan %1,0,%0"                                              \
+          : "=r" ((USItype)(x))                                        \
+          : "r" ((USItype)(count)))
+#else
+/* SPARC without integer multiplication and divide instructions.
+   (i.e. at least Sun4/20,40,60,65,75,110,260,280,330,360,380,470,490) */
+#define umul_ppmm(w1, w0, u, v) \
+  __asm__ ("! Inlined umul_ppmm
+       wr      %%g0,%2,%%y     ! SPARC has 0-3 delay insn after a wr
+       sra     %3,31,%%g2      ! Don't move this insn
+       and     %2,%%g2,%%g2    ! Don't move this insn
+       andcc   %%g0,0,%%g1     ! Don't move this insn
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,%3,%%g1
+       mulscc  %%g1,0,%%g1
+       add     %%g1,%%g2,%0
+       rd      %%y,%1"                                                 \
+          : "=r" ((USItype)(w1)),                                      \
+            "=r" ((USItype)(w0))                                       \
+          : "%rI" ((USItype)(u)),                                      \
+            "r" ((USItype)(v))                                         \
+          : "%g1", "%g2" __AND_CLOBBER_CC)
+#define UMUL_TIME 39           /* 39 instructions */
+#define udiv_qrnnd(q, r, n1, n0, d) \
+  do { USItype __r;                                                    \
+    (q) = __udiv_qrnnd (&__r, (n1), (n0), (d));                                \
+    (r) = __r;                                                         \
+  } while (0)
+extern USItype __udiv_qrnnd ();
+#define UDIV_TIME 140
+#endif /* __sparclite__ */
+#endif /* __sparc_v8__ */
+#endif /* __sparc__ */
+
+#if defined (__vax__) && W_TYPE_SIZE == 32
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("addl2 %5,%1
+       adwc %3,%0"                                                     \
+          : "=g" ((USItype)(sh)),                                      \
+            "=&g" ((USItype)(sl))                                      \
+          : "%0" ((USItype)(ah)),                                      \
+            "g" ((USItype)(bh)),                                       \
+            "%1" ((USItype)(al)),                                      \
+            "g" ((USItype)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("subl2 %5,%1
+       sbwc %3,%0"                                                     \
+          : "=g" ((USItype)(sh)),                                      \
+            "=&g" ((USItype)(sl))                                      \
+          : "0" ((USItype)(ah)),                                       \
+            "g" ((USItype)(bh)),                                       \
+            "1" ((USItype)(al)),                                       \
+            "g" ((USItype)(bl)))
+#define umul_ppmm(xh, xl, m0, m1) \
+  do {                                                                 \
+    union {UDItype __ll;                                               \
+          struct {USItype __l, __h;} __i;                              \
+         } __xx;                                                       \
+    USItype __m0 = (m0), __m1 = (m1);                                  \
+    __asm__ ("emul %1,%2,$0,%0"                                                \
+            : "=g" (__xx.__ll)                                         \
+            : "g" (__m0),                                              \
+              "g" (__m1));                                             \
+    (xh) = __xx.__i.__h; (xl) = __xx.__i.__l;                          \
+    (xh) += ((((SItype) __m0 >> 31) & __m1)                            \
+            + (((SItype) __m1 >> 31) & __m0));                         \
+  } while (0)
+#define sdiv_qrnnd(q, r, n1, n0, d) \
+  do {                                                                 \
+    union {DItype __ll;                                                        \
+          struct {SItype __l, __h;} __i;                               \
+         } __xx;                                                       \
+    __xx.__i.__h = n1; __xx.__i.__l = n0;                              \
+    __asm__ ("ediv %3,%2,%0,%1"                                                \
+            : "=g" (q), "=g" (r)                                       \
+            : "g" (__n1n0.ll), "g" (d));                               \
+  } while (0)
+#endif /* __vax__ */
+
+#if defined (__z8000__) && W_TYPE_SIZE == 16
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  __asm__ ("add        %H1,%H5\n\tadc  %H0,%H3"                                \
+          : "=r" ((unsigned int)(sh)),                                 \
+            "=&r" ((unsigned int)(sl))                                 \
+          : "%0" ((unsigned int)(ah)),                                 \
+            "r" ((unsigned int)(bh)),                                  \
+            "%1" ((unsigned int)(al)),                                 \
+            "rQR" ((unsigned int)(bl)))
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  __asm__ ("sub        %H1,%H5\n\tsbc  %H0,%H3"                                \
+          : "=r" ((unsigned int)(sh)),                                 \
+            "=&r" ((unsigned int)(sl))                                 \
+          : "0" ((unsigned int)(ah)),                                  \
+            "r" ((unsigned int)(bh)),                                  \
+            "1" ((unsigned int)(al)),                                  \
+            "rQR" ((unsigned int)(bl)))
+#define umul_ppmm(xh, xl, m0, m1) \
+  do {                                                                 \
+    union {long int __ll;                                              \
+          struct {unsigned int __h, __l;} __i;                         \
+         } __xx;                                                       \
+    unsigned int __m0 = (m0), __m1 = (m1);                             \
+    __asm__ ("mult     %S0,%H3"                                        \
+            : "=r" (__xx.__i.__h),                                     \
+              "=r" (__xx.__i.__l)                                      \
+            : "%1" (__m0),                                             \
+              "rQR" (__m1));                                           \
+    (xh) = __xx.__i.__h; (xl) = __xx.__i.__l;                          \
+    (xh) += ((((signed int) __m0 >> 15) & __m1)                                \
+            + (((signed int) __m1 >> 15) & __m0));                     \
+  } while (0)
+#define umul_ppmm_off(xh, xl, m0, m1) \
+  do {                                                                 \
+    union {long int __ll;                                              \
+          struct {unsigned int __h, __l;} __i;                         \
+         } __xx;                                                       \
+    __asm__ ("mult     %S0,%H3"                                        \
+            : "=r" (__xx.__i.__h),                                     \
+              "=r" (__xx.__i.__l)                                      \
+            : "%1" (m0),                                               \
+              "rQR" (m1));                                             \
+    (xh) = __xx.__i.__h + ((((signed int) m0 >> 15) & m1)              \
+                          + (((signed int) m1 >> 15) & m0));           \
+    (xl) = __xx.__i.__l;                                               \
+  } while (0)
+#endif /* __z8000__ */
+
+#endif /* __GNUC__ */
+
+
+#if !defined (umul_ppmm) && defined (__umulsidi3)
+#define umul_ppmm(ph, pl, m0, m1) \
+  {                                                                    \
+    UDWtype __ll = __umulsidi3 (m0, m1);                               \
+    ph = (UWtype) (__ll >> W_TYPE_SIZE);                               \
+    pl = (UWtype) __ll;                                                        \
+  }
+#endif
+
+#if !defined (__umulsidi3)
+#define __umulsidi3(u, v) \
+  ({UWtype __hi, __lo;                                                 \
+    umul_ppmm (__hi, __lo, u, v);                                      \
+    ((UDWtype) __hi << W_TYPE_SIZE) | __lo; })
+#endif
+
+/* If this machine has no inline assembler, use C macros.  */
+
+#if !defined (add_ssaaaa)
+#define add_ssaaaa(sh, sl, ah, al, bh, bl) \
+  do {                                                                 \
+    UWtype __x;                                                                \
+    __x = (al) + (bl);                                                 \
+    (sh) = (ah) + (bh) + (__x < (al));                                 \
+    (sl) = __x;                                                                \
+  } while (0)
+#endif
+
+#if !defined (sub_ddmmss)
+#define sub_ddmmss(sh, sl, ah, al, bh, bl) \
+  do {                                                                 \
+    UWtype __x;                                                                \
+    __x = (al) - (bl);                                                 \
+    (sh) = (ah) - (bh) - (__x > (al));                                 \
+    (sl) = __x;                                                                \
+  } while (0)
+#endif
+
+#if !defined (umul_ppmm)
+#define umul_ppmm(w1, w0, u, v)                                                \
+  do {                                                                 \
+    UWtype __x0, __x1, __x2, __x3;                                     \
+    UHWtype __ul, __vl, __uh, __vh;                                    \
+                                                                       \
+    __ul = __ll_lowpart (u);                                           \
+    __uh = __ll_highpart (u);                                          \
+    __vl = __ll_lowpart (v);                                           \
+    __vh = __ll_highpart (v);                                          \
+                                                                       \
+    __x0 = (UWtype) __ul * __vl;                                       \
+    __x1 = (UWtype) __ul * __vh;                                       \
+    __x2 = (UWtype) __uh * __vl;                                       \
+    __x3 = (UWtype) __uh * __vh;                                       \
+                                                                       \
+    __x1 += __ll_highpart (__x0);/* this can't give carry */           \
+    __x1 += __x2;              /* but this indeed can */               \
+    if (__x1 < __x2)           /* did we get it? */                    \
+      __x3 += __ll_B;          /* yes, add it in the proper pos. */    \
+                                                                       \
+    (w1) = __x3 + __ll_highpart (__x1);                                        \
+    (w0) = (__ll_lowpart (__x1) << W_TYPE_SIZE/2) + __ll_lowpart (__x0);\
+  } while (0)
+#endif
+
+/* Define this unconditionally, so it can be used for debugging.  */
+#define __udiv_qrnnd_c(q, r, n1, n0, d) \
+  do {                                                                 \
+    UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m;                    \
+    __d1 = __ll_highpart (d);                                          \
+    __d0 = __ll_lowpart (d);                                           \
+                                                                       \
+    __r1 = (n1) % __d1;                                                        \
+    __q1 = (n1) / __d1;                                                        \
+    __m = (UWtype) __q1 * __d0;                                                \
+    __r1 = __r1 * __ll_B | __ll_highpart (n0);                         \
+    if (__r1 < __m)                                                    \
+      {                                                                        \
+       __q1--, __r1 += (d);                                            \
+       if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\
+         if (__r1 < __m)                                               \
+           __q1--, __r1 += (d);                                        \
+      }                                                                        \
+    __r1 -= __m;                                                       \
+                                                                       \
+    __r0 = __r1 % __d1;                                                        \
+    __q0 = __r1 / __d1;                                                        \
+    __m = (UWtype) __q0 * __d0;                                                \
+    __r0 = __r0 * __ll_B | __ll_lowpart (n0);                          \
+    if (__r0 < __m)                                                    \
+      {                                                                        \
+       __q0--, __r0 += (d);                                            \
+       if (__r0 >= (d))                                                \
+         if (__r0 < __m)                                               \
+           __q0--, __r0 += (d);                                        \
+      }                                                                        \
+    __r0 -= __m;                                                       \
+                                                                       \
+    (q) = (UWtype) __q1 * __ll_B | __q0;                               \
+    (r) = __r0;                                                                \
+  } while (0)
+
+/* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through
+   __udiv_w_sdiv (defined in libgcc or elsewhere).  */
+#if !defined (udiv_qrnnd) && defined (sdiv_qrnnd)
+#define udiv_qrnnd(q, r, nh, nl, d) \
+  do {                                                                 \
+    UWtype __r;                                                                \
+    (q) = __udiv_w_sdiv (&__r, nh, nl, d);                             \
+    (r) = __r;                                                         \
+  } while (0)
+#endif
+
+/* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c.  */
+#if !defined (udiv_qrnnd)
+#define UDIV_NEEDS_NORMALIZATION 1
+#define udiv_qrnnd __udiv_qrnnd_c
+#endif
+
+#if !defined (count_leading_zeros)
+extern
+#ifdef __STDC__
+const
+#endif
+unsigned char __clz_tab[];
+#define count_leading_zeros(count, x) \
+  do {                                                                 \
+    UWtype __xr = (x);                                                 \
+    UWtype __a;                                                                \
+                                                                       \
+    if (W_TYPE_SIZE <= 32)                                             \
+      {                                                                        \
+       __a = __xr < ((UWtype) 1 << 2*__BITS4)                          \
+         ? (__xr < ((UWtype) 1 << __BITS4) ? 0 : __BITS4)              \
+         : (__xr < ((UWtype) 1 << 3*__BITS4) ?  2*__BITS4 : 3*__BITS4);\
+      }                                                                        \
+    else                                                               \
+      {                                                                        \
+       for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8)                  \
+         if (((__xr >> __a) & 0xff) != 0)                              \
+           break;                                                      \
+      }                                                                        \
+                                                                       \
+    (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a);            \
+  } while (0)
+/* This version gives a well-defined value for zero. */
+#define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE
+#endif
+
+#if !defined (count_trailing_zeros)
+/* Define count_trailing_zeros using count_leading_zeros.  The latter might be
+   defined in asm, but if it is not, the C version above is good enough.  */
+#define count_trailing_zeros(count, x) \
+  do {                                                                 \
+    UWtype __ctz_x = (x);                                              \
+    UWtype __ctz_c;                                                    \
+    count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x);                 \
+    (count) = W_TYPE_SIZE - 1 - __ctz_c;                               \
+  } while (0)
+#endif
+
+#ifndef UDIV_NEEDS_NORMALIZATION
+#define UDIV_NEEDS_NORMALIZATION 0
+#endif
diff --git a/stdlib/mp_clz_tab.c b/stdlib/mp_clz_tab.c
new file mode 100644 (file)
index 0000000..ed1b7ee
--- /dev/null
@@ -0,0 +1,39 @@
+/* __clz_tab -- support for longlong.h
+
+Copyright (C) 1991, 1993, 1994 Free Software Foundation, Inc.
+
+This file is part of the GNU MP Library.
+
+The GNU MP Library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Library General Public License as published by
+the Free Software Foundation; either version 2 of the License, or (at your
+option) any later version.
+
+The GNU MP Library is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
+or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Library General Public
+License for more details.
+
+You should have received a copy of the GNU Library General Public License
+along with the GNU MP Library; see the file COPYING.LIB.  If not, write to
+the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+#if 0
+#include "gmp.h"
+#include "gmp-impl.h"
+#endif
+
+#if 0
+const
+#endif
+ unsigned char __clz_tab[] =
+{
+  0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
+  6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
+  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+  7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
+  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+  8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
+};