Marc:
I tired of wondering whether fixing the bignum macros in gambit.h would speed up bignum calculations substantially, so I changed them, and the answer is, No, not really. I get about 2% speedup on some operations, less on others, on a 2GHz G5 running Mac OS X 10.4.3, with CC='gcc -mcpu=970 -m64'
So I investigated why this was happening. It turns out that I already had changed the macros for F64VECTOR{REF,SET} to use the information that the bottom bits of a fixnum are zero, so the fft in bignum multiplication didn't benefit much from the change. (Loading and unloading 8-bit values from the bignum didn't benefit from this information about fixnums.)
Gambit needs a better GVM register allocator. You know that---there is way too much screwing around moving values one and off the stack at basic block boundaries, the stack is used for local variables in a basic block, etc. You had code in the compiler to deal with at least the latter problem, perhaps you want to break it out again and look at it more closely.
_num.o is a bit smaller with the new macros:
[lindv2:~/programs/gambc40b16-new] lucier% ll lib/_num.o -rw-r--r-- 1 lucier lucier 589036 Jan 6 12:32 lib/_num.o [lindv2:~/programs/gambc40b16] lucier% ll lib/_num.o -rw-r--r-- 1 lucier lucier 589260 Jan 6 10:48 lib/_num.o
The new macros are a *lot* cleaner, however, and the speedups are fairly consistent, so I'm including my changed gambit.h in this e- mail. I tested it with my set of bignum operations in gambit- trace2.scm, which I'm also including, together with the results.
The new macros assume that ___{S,U}32 and ___{S,U}16 types exist. Perhaps you'd like to say a few words why you jump through all the hoops you do to allow Gambit to run on machines that don't have these types. (I don't know of any current machines like that.)
BTW, some of the bignum a-digit macros were used in ways that I wasn't familiar with; you must have added some new macros that used the BIGA* macros in new ways. I didn't want to screw with the new use of those macros, so I renamed the old macros to ___MARCBIGA* and left them. Perhaps you'd like to look at those.
Brad