[kaffe] Re: Classpath's doubleToLongBits

Dalibor Topic dalibor.topic at googlemail.com
Fri Feb 8 03:25:48 PST 2008


Christian Thalinger schrieb:
> On Fri, 2008-02-08 at 00:26 +0100, Dalibor Topic wrote:
>   
>> 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?
>>     
>
> That sounds actually very good, if it works on all configurations.  I
> can remember we had a lot of problems to get these functions right on an
> Arm system with VFP.  For more problems see also:
>
> http://gcc.gnu.org/bugzilla/show_bug.cgi?id=22800
>   
Yeah, that's why I'd like to go step by step, and first slash the VM 
interface methods I can slash, and
then implement it with ieee754.h as an option, (adding a #define 
BIG_ENDIAN __BIG_ENDIAN
for the broken glibc versions). I'll make sure to post the native 
patches for comments first, as I don't
have access to a VFP box.

cheers,
dalibor topic




More information about the kaffe mailing list