Mark H Weaver <m...@netris.org> writes: > FYI, I've pushed patches to Guile's git repository (stable-2.0 branch) > which eliminate the known obstacles to mini-gmp integration.
Out of curiosity, I had a quick look at the patches as posted to the guile devel list. For the small integer gcd code, you may want to have a look at the tricks used in http://gmplib.org:8000/gmp/file/304af17b9ccc/mpn/generic/gcd_1.c, the code under GCD_1_METHOD == 2 1. Shift out the least significant bit of both a and b (they're always one). Maybe you don't need this of you have some extra bits already (signed types, or some bits reserved for type info). 2. Then, the sign bit of a - b correctly gives the result of the comparison a < b. Constructing a mask from this difference is then a simple right shift (if >> on a signed int is not an arithmetic right shift, you need shift and a negation). 3. Use this bit mask when forming the absolute value |a - b|, and when swapping values around, to avoid unpredictable branches which typically are quite expensive. Regards, /Niels -- Niels Möller. PGP-encrypted email is preferred. Keyid C0B98E26. Internet email is subject to wholesale government surveillance.