git-svn-id: trunk@27943 -
@@ -382,12 +382,14 @@ uses
var
p: aInt;
nc,delta,q1,r1,q2,r2,two_N_minus_1 : aWord;
+ mask: aWord;
begin
two_N_minus_1:=aWord(1) shl (N-1);
magic_add:=false;
{$push}
{$warnings off }
- nc:=aWord(-1)-(-d) mod d;
+ mask:=aWord(not 0) shr (64-N);
+ nc:=(mask-(-d) mod d);
{$pop}
p:=N-1; { initialize p }
q1:=two_N_minus_1 div nc; { initialize q1 = 2**p/nc }
@@ -422,7 +424,7 @@ uses
end;
delta:=d-1-r2;
until not ((p<(2*N)) and ((q1<delta) or ((q1=delta) and (r1=0))));
- magic_m:=q2+1; { resulting magic number }
+ magic_m:=(q2+1) and mask; { resulting magic number }
magic_shift:=p-N; { resulting shift }