[Bf-committers] build error amd64

Ken Hughes khughes at pacific.edu
Fri Nov 25 18:32:34 CET 2005


Mats Holmberg wrote:
> Ken Hughes wrote:
> 
>> Mats Holmberg wrote:
>>
>>> Hi,
>>>
>>> trying to build on my new amd64 system ends in the following:
>>>  ......
>>
>> Ive got a commit for this ready, but wanted to talk to Ton first.  In 
>> the meantime, check #3264 in the bug tracker.  You can apply the patch 
>> there and it will build.
>>
>> Ken
>>
> Ok, thanks for that! I'll hold..

Since Ton isn't around on IRC, maybe he'll read this so I can do a commit:

The compiler error in source/kernel/gen_system/GEN_HashedPtr.cpp is 
caused by a function which is generating a hash key for an array index 
from a pointer.  It seems safe for now to let the hash function work on 
either a 32-bit or 64-bit pointer (since it's hashing the lower bits of 
the larger pointer, which should still vary enough to give a good result).

My proposed patch casts the pointer to a matching-sized long object, 
then masks and returns the lower 32-bits.  It should also work under 
64-bit Windows, at least until 64-bit cygwin support exists.  Roughly 
speaking here's the proposed code:

new in source/kernel/gen_system/GEN_HashedPtr.cpp:
----------------
unsigned int GEN_Hash(void * inDWord)
{
#if defined(_WIN64)
     unsigned __int64 key = (unsigned __int64)inDWord;
#else
     unsigned long key = (unsigned long)inDWord;
#endif

     key += ~(key << 16);
     key ^=  (key >>  5);
     key +=  (key <<  3);
     key ^=  (key >> 13);
     key += ~(key <<  9);
     key ^=  (key >> 17);

     return (unsigned int)(key & 0xffffffff);
}
----------------

new source/kernel/gen_system/GEN_HashedPtr.h:

----------------
unsigned int GEN_Hash(void * inDWord);
----------------



More information about the Bf-committers mailing list