[Openmcl-devel] Why does this "cheat"/"lie" not work?...

Jon S. Anthony j-anthony at comcast.net
Sat Feb 6 18:08:09 UTC 2010

On Sat, 2010-02-06 at 16:20 +0100, Waldek Hebisch wrote:

> AFAICS on 64 bit machine (UNSIGNED-BYTE 32) time (UNSIGNED-BYTE 32)
> multiplication is done via .SPBUILTIN-TIMES and code using
> (UNSIGNED-BYTE 32) is doing a lot of work converting between fixnum
> format and (UNSIGNED-BYTE 32).  For example body of inner loop of
> 32 bit copy generates

A couple things.  Maybe I'm lost, but if you are just copying (like in
my original example code), why is there any multiplication going on with
the elements being copied?  Or any multiplication at all?

Also, again for the original example, on an X86-64, the type spec of the
elements being copied would be (unsigned-byte 64), i.e., the natural
word size, not 32.

So, if you are moving 32 bit chunks on a 64 bit machine, you aren't just
"loading and storing registers" (more or less), so maybe that is where
the extra stuff here is coming from?

> Maybe I am stating obvious, but have you considered keeping info about
> changes in register use out of band?  Then garbage collector would
> interpret the info and compute register mask.  Seems much cheaper
> (both in space and in execution time) than current code to change mask.
> Also, with sufficiently clever garbage collector it should be possible
> to get effect of change of mask exactly at point when value transitions
> from immediate to node (that is eliminate need to zero register before
> change).

Interesting.  Looking forward to the response.


More information about the Openmcl-devel mailing list