Re: Classpath's doubleToLongBits

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Christian Thalinger schrieb:
On Mon, 2008-02-18 at 04:03 +0100, Dalibor Topic wrote:
This one turned out to be a lot more fun to track down.

It's pretty easy to rewrite the test whether to swap words in a jdouble: put -0.0 into a jvalue's jdouble element, and if the correspoding jlong bitstream is > 0, you have to swap the words. It's a way of dynamically doing what the fdlibm #defines do, but it works out the same way:
swap on arm-debian-oabi.

But that didn't fix the breakage.

So I played around some more, and eventually, it turned out that kaffe's classfile constant parser was working fine, and I was reading in doubles the way arm's FPU expected them laid out, it
turned out the interpreter was working ok, too, and so on.

But the breakage was still there.

Turning the way, for example, the double constants were parsed around, and doing it the 'wrong' way, fixed some regression tests, but broke others. Similarly, reassembling doubles in the interpreter
from words the 'wrong' way had the same effect with other tests.

So I had to examine things a bit more closely with jcf-dump. It turned out that, since I was using a glibj.zip compiled on an x86-linux host, the constant in the class java.lang.Double were laid out correctly. But in the tests classes compiled on the arm-oabi-linux platform using ecj on gcj-4.3, double constants were laid out incorrectly, with their words swapped, as a comparison with the
tests compiled on x86-linux with ecj on gcj showed.

So, current Kaffe CVS head interpreter works on arm-oabi-linux without regressions. The regressions Kiyo-san has seen are caused by buggy compilers (jikes / ecj on gcj). And I'll move on to comitting the
jit patches for arm-linux next.

That sounds like it was a lot of work.  Did you change anything new in
GNU Classpath or should I test the current CVS version
I wrote a patch using the -0.0d > 0L hack described above to detect whether we should switch words in a double, but it turned out not to be necessary, so current CVS is fine (and contains no related changes).

cheers,
dalibor topic


[Index of Archives]     [Linux Kernel]     [Linux Cryptography]     [Fedora]     [Fedora Directory]     [Red Hat Development]

  Powered by Linux