[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: gmp issues (long)

From: Marius Vollmer
Subject: Re: gmp issues (long)
Date: 26 Feb 2003 00:01:41 +0100
User-agent: Gnus/5.09 (Gnus v5.9.0) Emacs/21.2

Rob Browning <address@hidden> writes:

> Marius Vollmer <address@hidden> writes:
> > The way I understand things, GMP does not allocate the mpz_t's itself,
> > right?  Then you should be able to do things like
> >
> >    SCM z = scm_double_cell (bignum_tag, 0, 0, 0);
> >    mpz_init (SCM_CELL_ADDR_1 (z));
> > where SCM_CELL_ADDR_1 or something similar needs to be added to gc.h.
> Hmm.  Yep, that should work, and would be even faster.
> Any easy way we could rearrange things to that we allocate a double
> cell without initializing its fields at all (until the mpz_init),
> i.e. save the redundant init to 0, without causing trouble with the
> GC?

Possibly, but we would have to break into the scm_double_cell
abstraction.  I.e., we should _not_ provide a function that creates an
unintialized double cell, but we might add another function that
creates a double cell and simultaneously initializes it as a mpz_t.

'mpz_init' is probably very simple and maybe just initializing it with
zeros is all it takes.  Maybe the compiler can inline both
scm_double_cell and mpz_init and optimize the redundant stores away.

Also, maybe we can initialize a mpz_t by copying a constant struct
into it (the way POSIX mutxes can be initialized):

   mpz_t n = MPZ_INITIALIZER;

We can then have a new function that initializes a double cell from a
12-byte constant struct and then do:

   mpz_t scm_i_mpz_initializer = MPZ_INITIALIZER;


   z = scm_double_cell_from_struct (bignum_tag,
                                    (scm_t_bits *)&scm_i_mpz_initializer);

> Anyway, thanks for the suggestion.  I think I can get this working
> pretty quickly so we can see how it fares.  It'd be nice if it helps
> out noticably on the performance side too...

Hopefully!  :-)

GPG: D5D4E405 - 2F9B BCCC 8527 692A 04E3  331E FAF8 226A D5D4 E405

reply via email to

[Prev in Thread] Current Thread [Next in Thread]