Hi, in mini-gmp.c there's check #if !defined(MINI_GMP_DONT_USE_FLOAT_H), to not include float.h, in which case we'll assume 53 mantissa bits. This is set where mini-gmp.c is included in bootstrap.c. As far as I'm aware, it's not used anywhere else.
I think I'd like to replace this with a knob to exclude all float functions. I think we've discussed earlier if mini-gmp should be made more modular; it might be nice to include mini-gmp.c and enable only the functions that you need. Which may be a rabbit hole if we try to do it thoroughly. My motivation for disabling floats in particular is for supporting embedded systems without floating point, where it's desirable to not get a link dependency on a software float implementation. The hardware I'm interested in at the moment is the tillitis tkey (an open hardware device, which uses a 32-bit riscv with a multipler, but no divider and no floats). Proposed patch below. What do you think? Regards, /Niels diff -r 1dc7d5dabc8d bootstrap.c --- a/bootstrap.c Fri Sep 19 17:18:39 2025 +0200 +++ b/bootstrap.c Wed Sep 24 08:59:37 2025 +0200 @@ -29,7 +29,7 @@ see https://www.gnu.org/licenses/. */ -#define MINI_GMP_DONT_USE_FLOAT_H 1 +#define MINI_GMP_ENABLE_FLOAT 0 #include "mini-gmp/mini-gmp.c" #define MIN(l,o) ((l) < (o) ? (l) : (o)) diff -r 1dc7d5dabc8d mini-gmp/mini-gmp.c --- a/mini-gmp/mini-gmp.c Fri Sep 19 17:18:39 2025 +0200 +++ b/mini-gmp/mini-gmp.c Wed Sep 24 08:59:37 2025 +0200 @@ -51,7 +51,11 @@ #include "mini-gmp.h" -#if !defined(MINI_GMP_DONT_USE_FLOAT_H) +#ifndef MINI_GMP_ENABLE_FLOAT +#define MINI_GMP_ENABLE_FLOAT 1 +#endif + +#if MINI_GMP_ENABLE_FLOAT #include <float.h> #endif @@ -1705,6 +1709,7 @@ } +#if MINI_GMP_ENABLE_FLOAT /* Conversions and comparison to double. */ void mpz_set_d (mpz_t r, double x) @@ -1861,6 +1866,7 @@ return mpz_cmpabs_d (x, d); } } +#endif /* MINI_GMP_ENABLE_FLOAT */ /* MPZ comparisons and the like. */ diff -r 1dc7d5dabc8d mini-gmp/mini-mpq.c --- a/mini-gmp/mini-mpq.c Fri Sep 19 17:18:39 2025 +0200 +++ b/mini-gmp/mini-mpq.c Wed Sep 24 08:59:37 2025 +0200 @@ -41,6 +41,10 @@ #include "mini-mpq.h" +#ifndef MINI_GMP_ENABLE_FLOAT +#define MINI_GMP_ENABLE_FLOAT 1 +#endif + #ifndef GMP_LIMB_HIGHBIT /* Define macros and static functions already defined by mini-gmp.c */ #define GMP_LIMB_BITS (sizeof(mp_limb_t) * CHAR_BIT) @@ -420,6 +424,7 @@ } +#if MINI_GMP_ENABLE_FLOAT /* MPQ to/from double. */ void mpq_set_d (mpq_t r, double x) @@ -472,7 +477,7 @@ return ret; } - +#endif /* MINI_GMP_ENABLE_FLOAT */ /* MPQ and strings/streams. */ char * -- Niels Möller. PGP key CB4962D070D77D7FCB8BA36271D8F1FF368C6677. Internet email is subject to wholesale government surveillance. _______________________________________________ gmp-devel mailing list [email protected] https://gmplib.org/mailman/listinfo/gmp-devel
