At 09:57 AM 9/12/2001 -0700, Hong Zhang wrote:
> > Now works on Solaris and i386, but segfaults at the GRAB_IV call in
> > read_constants_table on my Alpha. Problems with the integer-pointer
> > conversions in memory.c? (line 29 is giving me a warning).
>
>The line 29 is extremely wrong. It assigns IV to void* without casting.

True. I'll go fix it.

>The alignment calculation is very wrong too. Using classic alignment,
>it should read as:
>
>         mem = (void*) (((IV)mem + mask) & ~mask);

Nope. We're trying to align to a power-of-two boundary, and mask is set to 
chop off the low bits, not the high ones. It should be something like:

    111111110000

The calc:

     mem & mask + (~mask + 1)

will chop the low bits off of mem, making it too small, but power-of-two 
aligned. Then we add in the inverse of mask + 1 (in the above example, 
that'd be 10000) to jump it to the next power-of-two boundary.

Horribly wasteful of memory, definitely, and the final allocation system 
will do things better, but this is OK to start.

                                        Dan

--------------------------------------"it's like this"-------------------
Dan Sugalski                          even samurai
[EMAIL PROTECTED]                         have teddy bears and even
                                      teddy bears get drunk

Reply via email to