Classpath's doubleToLongBits (was: Re: [kaffe] cross-compile error)
Dalibor Topic
robilad at kaffe.org
Thu Feb 7 15:26:44 PST 2008
Dalibor Topic wrote:
> Dalibor Topic wrote:
>>
>> My plan would be to look at making the interpreter pass on arm-oabi
>> and arm-eabi without failures, and then
>> to move on to the jits. I'd also like to see if I can rip out all the
>> atomic* code in Kaffe's config dirs by using glib's
>> atomic functions instead, as that would be less low level code from
>> libc to keep around as copies in Kaffe.
>>
>> Any volunteers for the arm-* interpreter failures?
> 3 failures on OABI, 5 on EABI, btw.
I've looked a bit closer at the 3 ARM OABI errors, in particular at the
errors in test/regression/DoubleConst.java . That test fails because we
get the bitstreams of the doubles being tested when we call
Double.doubleToLongbits with swapped words, i.e. instead of
0x7fefffffffffffff we get 0xffffffff7fefffff.
The current GNU Classpath implementation of
Java_java_lang_VMDouble_doubleToLongBits ends up swapping the words,
whenever __ARMEL__ is defined. That makes the DoubleConst test fail for
Cacao, Kaffe, etc. Since twisti said on IRC that he had spent a lot of
time trying to get it right on his ARM systems, I didn't want to mess
with the corresponding file in fdlibm.
So I wrote another implementation of the function, using ieee754.h (part
of glibc). Basically, it boils down to shifting the bits from the
bitfields to the right places inside the jlong. Easy.
Unfortunately, that didn't work on arm OABI debian sid either. It turned
out that glibc has a bug in the iee754.h header file, that comes to bite
one on arm OABI. Filed as
http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=464594 with a patch
attached.
Meanwhile, that still means that those 3 tests fail until glibc is
fixed. So ... I'll send in a couple of patches to the classpath patches
list to first rewrite the doubleToLongBits in Java (and the same for
Float), removing it from the VM interface, and then, I'll send in a
patch to add the ieee754.h way of dealing with fetching the bits to the
current way.
Does that sound useful?
cheers,
dalibor topic
More information about the kaffe
mailing list