Hi Thomas, Thanks for your patch. On Wed, Sep 27, 2023 at 08:59:34AM +0200, Thomas Haller wrote: > If we have a plain EXPR_VALUE value, there is no need to copy > it via mpz_set(). > > Signed-off-by: Thomas Haller <thaller@xxxxxxxxxx> > --- > src/mergesort.c | 34 ++++++++++++++++++---------------- > 1 file changed, 18 insertions(+), 16 deletions(-) > > diff --git a/src/mergesort.c b/src/mergesort.c > index 5965236af6b7..af7f163b2779 100644 > --- a/src/mergesort.c > +++ b/src/mergesort.c > @@ -12,8 +12,6 @@ > #include <gmputil.h> > #include <list.h> > > -static void expr_msort_value(const struct expr *expr, mpz_t value); > - > static void concat_expr_msort_value(const struct expr *expr, mpz_t value) > { > unsigned int len = 0, ilen; > @@ -29,20 +27,20 @@ static void concat_expr_msort_value(const struct expr *expr, mpz_t value) > mpz_import_data(value, data, BYTEORDER_HOST_ENDIAN, len); > } > > -static void expr_msort_value(const struct expr *expr, mpz_t value) > +static mpz_srcptr expr_msort_value(const struct expr *expr, mpz_t value) > { > +recursive_again: We are in userspace, recursion is possible. Any chance to avoid the copy without this goto approach?