[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
8.2 Nails
Everything in this section is highly experimental and may disappear or be subject to incompatible changes in a future version of GMP.
Nails are an experimental feature whereby a few bits are left unused at the
top of each mp_limb_t
. This can significantly improve carry handling
on some processors.
All the mpn
functions accepting limb data will expect the nail bits to
be zero on entry, and will return data with the nails similarly all zero.
This applies both to limb vectors and to single limb arguments.
Nails can be enabled by configuring with ‘--enable-nails’. By default the number of bits will be chosen according to what suits the host processor, but a particular number can be selected with ‘--enable-nails=N’.
At the mpn level, a nail build is neither source nor binary compatible with a non-nail build, strictly speaking. But programs acting on limbs only through the mpn functions are likely to work equally well with either build, and judicious use of the definitions below should make any program compatible with either build, at the source level.
For the higher level routines, meaning mpz
etc, a nail build should be
fully source and binary compatible with a non-nail build.
- Macro: GMP_NAIL_BITS
- Macro: GMP_NUMB_BITS
- Macro: GMP_LIMB_BITS
GMP_NAIL_BITS
is the number of nail bits, or 0 when nails are not in use.GMP_NUMB_BITS
is the number of data bits in a limb.GMP_LIMB_BITS
is the total number of bits in anmp_limb_t
. In all casesGMP_LIMB_BITS == GMP_NAIL_BITS + GMP_NUMB_BITS
- Macro: GMP_NAIL_MASK
- Macro: GMP_NUMB_MASK
Bit masks for the nail and number parts of a limb.
GMP_NAIL_MASK
is 0 when nails are not in use.GMP_NAIL_MASK
is not often needed, since the nail part can be obtained withx >> GMP_NUMB_BITS
, and that means one less large constant, which can help various RISC chips.
- Macro: GMP_NUMB_MAX
The maximum value that can be stored in the number part of a limb. This is the same as
GMP_NUMB_MASK
, but can be used for clarity when doing comparisons rather than bit-wise operations.
The term “nails” comes from finger or toe nails, which are at the ends of a limb (arm or leg). “numb” is short for number, but is also how the developers felt after trying for a long time to come up with sensible names for these things.
In the future (the distant future most likely) a non-zero nail might be permitted, giving non-unique representations for numbers in a limb vector. This would help vector processors since carries would only ever need to propagate one or two limbs.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
This document was generated on March 31, 2014 using texi2html 5.0.