[fpc-pascal] LZMA Algorithm fails on 64bit

Matthias Klumpp matthias at nlinux.org
Mon Jan 25 13:29:48 CET 2010


> I think the code there is currently actually only correct on 64 bit
> platforms and wrong on 32 bit platforms: it seems that it should read an
> int64 in little endian format and converts it on-the-fly to the native
> endianess, but that currently only happens correctly on 64 bit platforms.
I
> was also wrong about what it does on 32 bit platforms, because that
depends
> on the used architecture. On PowerPC, it will indeed throw away the upper
> 32 bits as I described above. On i386, it will however result in
something
> like "v shl ((8 *i) and 31)".
I checked it: The old version and your code produce exactly the same value
on 64bit and 32bit. There is no difference between both results.

> I don't think there is a quick fix. Someone who knows what is going on
has
> to go through it and properly fix it. Hacking the code you posted will
only
> result in hiding a bug, and you will probably still get more errors
> elsewhere.
The problem is that no Pascal developer knows this code. It was translated
from Java code.
Can you imagine another difference between 64bit and 32bit which may cause
those error? The bitshifts result in the same value on 32bit and 64bit...
Kind regards
  Matthias Klumpp




More information about the fpc-pascal mailing list