I'm replacing the Squash function by Qword's one, but I have some trouble to convert the Double in xmm0 to an integer. The problem is that CVTSD2SI will convert to signed integers, so big values like 4294901760 will return indefinite integer value 80000000H, rather than FFFF0000H. :redface:

`@@Squash:`

fstp qword ptr Temp

lea edi,Ranges.ModelStart

movsd xmm0,Temp ;xmm0=weighted average

movsd xmm1,@@minus16

movsd xmm2,@@16

comisd xmm0,xmm1 ;test if p<-15.999988

jb @@SQ2 ;if so, bound it

comisd xmm0,xmm2 ;test if p>15.999988

ja @@SQ3 ;if so, bound it

@@SQ1: movaps xmm1,xmm0

addsd xmm0,@@17

addsd xmm0,xmm0

cvttsd2si ecx,xmm0

imul ecx,48

lea ecx,@@tbl1[ecx]

movsd xmm0,[ecx+0*8]

mulsd xmm0,xmm1

addsd xmm0,[ecx+1*8]

mulsd xmm0,xmm1

addsd xmm0,[ecx+2*8]

mulsd xmm0,xmm1

addsd xmm0,[ecx+3*8]

mulsd xmm0,xmm1

addsd xmm0,[ecx+4*8]

mulsd xmm0,xmm1

addsd xmm0,[ecx+5*8] ;xmm0=2^32/(1+2^-p)

BUG: cvtsd2si eax,xmm0 ;eax=bit 0 upper limit

mov dword ptr [edi+4],-1 ;Upper limit of bit 1 always FFFFFFFFH

mov [edi],eax ;store bit 0 upper limit