<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">2017-04-18 4:02 GMT+02:00 Andres Valloud <span dir="ltr"><<a href="mailto:avalloud@smalltalk.comcastbiz.net" target="_blank">avalloud@smalltalk.comcastbiz.net</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
On 4/17/17 16:45 , Eliot Miranda wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
FYI, hash multiply is<br>
hashMultiply<br>
| low |<br>
low := self bitAnd: 16383.<br>
^(16r260D * low + ((16r260D * (self bitShift: -14) + (16r0065 * low)<br>
bitAnd: 16383) * 16384))<br>
bitAnd: 16r0FFFFFFF<br>
<br>
and when written as a primitive is<br>
hashMultiply<br>
| low |<br>
low := self bitAnd: 16383.<br>
^(16r260D * low + (16r260D * (self bitShift: -14) + (16r0065 * low) *<br>
16384))<br>
bitAnd: 16r0FFFFFFF<br>
because we don't care about the multiply by 16384 overflowing; when<br>
written as a primitive it won't overflow into a LargePositiveInteger.<br>
</blockquote>
<br>
Hopefully this doesn't mean the primitive got implemented by actually doing these operations verbatim.  As you have probably seen, that convoluted arithmetic is done this way in Smalltalk only to simulate a 32x32 multiplication bit-anded down to 28 bits without overflowing into large integers (the original code from August 2000 had my initials).<br>
<br>
At a sufficiently low level such as C, all that complexity is just an unsigned multiplication by 1664525.  The image code should still have a comment to that effect, did it get lost?<span class="gmail-HOEnZb"><font color="#888888"><br>
<br>
Andres.<br>
</font></span></blockquote></div><br></div><div class="gmail_extra">More: if it's a 64 bit image, then  we have 60 bit long unsigned small int<br>since 1664525 highBit = 21, and self is a hash result not exceeding 30 bits, we can implement hashMultiply as<br>    ^self * 1664525 bitAnd: 16r0FFFFFFF<br><br></div><div class="gmail_extra">Maybe the JIT can be given a second chance too.<br> </div></div>