From 8bcb331fc4c1b2b8793616f09d94848a64dec396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?P=C3=A1draig=20Brady?= Date: Wed, 7 Oct 2026 17:02:55 +0100 Subject: [PATCH] mini-gmp: avoid a mpz_sizeinbase call in mpz_get_str I noticed this when optimizing basenc --base58 in coreutils: $ dd bs=64k count=1 if=/dev/urandom of=58.in $ time src/basenc-before --base58 58.in >/dev/null real 0m3.476s $ time src/basenc-after --base58 58.in >/dev/null real 0m0.332s For reference, full libgmp performance is: $ time src/basenc-fullgmp --base58 58.in >/dev/null real 0m0.014s * mini-gmp/mini-gmp.c (mpz_get_str): The expensive mpz_sizeinbase() call is unneeded when a buffer is supplied. --- mini-gmp/mini-gmp.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/mini-gmp/mini-gmp.c b/mini-gmp/mini-gmp.c index 87cc12aa0f..9168d98667 100644 --- a/mini-gmp/mini-gmp.c +++ b/mini-gmp/mini-gmp.c @@ -4332,10 +4332,9 @@ mpz_get_str (char *sp, int base, const mpz_t u) return NULL; } - sn = 1 + mpz_sizeinbase (u, base); if (!sp) { - osn = 1 + sn; + osn = 2 + mpz_sizeinbase (u, base); sp = (char *) gmp_alloc (osn); } else -- 2.55.0