[\r
! cache = ...\r
0 3 LOAD32 rc-absolute-ppc-2/2 rt-immediate jit-rel\r
- ! key = class\r
- 5 4 MR\r
+ ! key = hashcode(class)\r
+ 5 4 3 SRAWI\r
+ 6 4 8 SRAWI\r
+ 5 5 6 ADD\r
+ 6 4 13 SRAWI\r
+ 5 5 6 ADD\r
+ 5 5 3 SLWI\r
! key &= cache.length - 1\r
5 5 mega-cache-size get 1 - bootstrap-cell * ANDI\r
! cache += array-start-offset\r
[
! cache = ...
temp0 0 MOV rc-absolute-cell rt-immediate jit-rel
- ! key = class
+ ! key = hashcode(class)
temp2 temp1 MOV
- bootstrap-cell 8 = [ temp2 1 SHL ] when
+ temp2 3 SHR
+ temp3 temp1 MOV
+ temp3 8 SHR
+ temp2 temp3 ADD
+ temp3 temp1 MOV
+ temp3 13 SHR
+ temp2 temp3 ADD
+ temp2 bootstrap-cell 4 = 3 4 ? SHL
! key &= cache.length - 1
temp2 mega-cache-size get 1 - bootstrap-cell * AND
! cache += array-start-offset
cell factor_vm::method_cache_hashcode(cell klass, array *array)
{
cell capacity = (array_capacity(array) >> 1) - 1;
- return ((klass >> TAG_BITS) & capacity) << 1;
+ return (((klass >> 3) + (klass >> 8) + (klass >> 13)) & capacity) << 1;
}
void factor_vm::update_method_cache(cell cache, cell klass, cell method)