On Feb 23, 2008, at 3:21 PM, Christian Jaeger wrote:
Be aware that this is untested: I wanted to test it, but couldn't figure out how to compile Gambit from Mercurial.
The Page http://dynamo.iro.umontreal.ca/~gambit/wiki/index.php/ How_to_Contribute suggests this should work:
$ make bootstrap
You need to do this with a clean 4.2.2 installation, before any of the .scm files have been modified. Then
hg pull make update make
and perhaps iterate the last two. (I haven't yet worked out precisely how to pass through a 4.X level version number change.)
+;; Global tweaking knobs:
+(##define-macro (macro-not-interrupts-enabled-for-speed)
- '(##declare (not interrupts-enabled)))
That's a really good idea. (It's in the same spirit as "(##define- macro (use-fast-bignum-algorithms) #t)" in _num.scm, which trades off speed for space.) Any loops in the bignum library that are linear in the size of the bignum have interrupts disabled for speed; disabling interrupts may not be so important since Marc started using the builtin_expect form to tell gcc that it is unlikely that interrupts will be taken at POLLs.
There are a number of places in _std.scm where raw "memmove"s are used for speed. I suppose one could audit all uses of (not interrupts-enabled) in the runtime to see why each of them was put there.
+(define-macro (combine a b)
- `(let ((a ,a)
(b ,b))
(##fixnum.bitwise-and
(##fixnum.* (##fixnum.+ a (##fixnum.arithmetic-shift-left b 1))
331804471)
(macro-max-fixnum32))))
That's not a bad idea either. Perhaps if it's not local to these functions it could be renamed hash-combine or something like that.
Brad