Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 16 Feb 2003 01:45:41 +0800
From:      Huang wen hui <hwh@gddsn.org.cn>
To:        java@FreeBSD.ORG
Subject:   Re: Optimization problem (Re: Math.pow bug for jdk1.3.1-p8 ?)
Message-ID:  <3E4E7CC5.8040400@gddsn.org.cn>
References:  <3E4C9DDD.4040204@gddsn.org.cn>	<20030215.175421.1015281127.shudo@localhost>	<20030216014802.A10817@misty.eyesbeyond.com> <20030216.005020.894433699.shudo@localhost> <3E4E7728.8030803@gddsn.org.cn>

next in thread | previous in thread | raw e-mail | index | archive | help
Huang wen hui wrote:

> shudo@computer.org ??:
>
>> From: Greg Lewis <glewis@eyesbeyond.com>
>>
>>  
>>
>>> On Sat, Feb 15, 2003 at 05:54:21PM +0900, shudo@computer.org wrote:
>>>   
>>>
>>>> I could confirm __j__ieee754_pow() in libjava.so behaves wrong and one
>>>> in libjava_g.so works correctly.
>>>>
>>>> I also tried writing a test program which calls __j__ieee754_pow() and
>>>> linked the program with e_pow.o, w_sqrt.o, e_sqrt.o, s_fabs.o,
>>>> s_scalbn.o and s_copysign.o generated during compilation process of
>>>> JDK 1.3.1.  The program produces the incorrect value (0, not 512).
>>>>
>>>> It is certain that there is a problem around fdlibm, FreeBSD's gcc
>>>> 2.95.4 or how the fdlibm compiled (compiler flags?).
>>>>     
>>>
>>> Sounds like its quite possibly due to problems with optimisation.
>>> Obviously, java_g uses no optimisation when compiling,
>>>   
>>
>>
>> I agree with you.
>>
>> Next thing we can do to track the cause down is to compile e_pow.c,
>> w_sqrt.c, e_sqrt.c, s_fabs.c, s_scalbn.c and s_copysign.c with
>> different compiler options (-O0, -O2 and so on) and see the result of
>> the ieee754_pow() function.  It may be good to supply different
>> options to each source code and identify which source code is badly
>> affected by optimization.
>>
>> We should report the bug of FreeBSD's gcc 2.95.4 to appropriate
>> persons if we could recognize the problem is due to the gcc.
>>
>>  Kazuyuki Shudo    shudo@computer.org    http://www.shudo.net/
>>
>> To Unsubscribe: send mail to majordomo@FreeBSD.org
>> with "unsubscribe freebsd-java" in the body of the message
>>
>>
>>  
>>
> This code is from 
> j2sdk1.3.1/src/share/native/java/lang/fdlibm/src/e_pow.c in jdk13 
> ports, gcc's optimization may has problem.
>
> #include <stdio.h>
>
> #define __HI(x) *(1+(int*)&x)
> #define __LO(x) *(int*)&x
>
>
> double tst(double x, double y)
> {
> double z,ax,z_h,z_l,p_h,p_l;
> double y1,t1,t2,r,s,t,u,v,w;
> int i,j,k,yisint,n;
> int hx,hy,ix,iy;
> unsigned lx,ly;
>
> u=1;
> v=1;
> t1=u+v;
> __LO(t1) = 0;
>
>
> t2=10;
> y1 = y;
> __LO(y1) = 0;
> p_l = (y-y1)*t1+y*t2;
> p_h = y1*t1;
> z = p_l+p_h; // return t1; //ok
> j = __HI(z); // return t1; //bad t1
> return t1;
> }
> main() {
> double d = tst(2.0,9.0);
> printf("%f\n", d);
> }
>
> ----output----
> gcc -O3 -o tst tst.c
> # ./tst
> 0.000000
> # gcc -O2 -o tst tst.c
> # ./tst
> 0.000000
> # gcc -O1 -o tst tst.c
> # ./tst
> 0.000000
> # gcc -O0 -o tst tst.c
> # ./tst
> 2.000000
> # gcc -v
> Using builtin specs.
> gcc version 2.95.4 20020320 [FreeBSD]
> # uname -a
> FreeBSD wfdb.gddsn.org.cn 4.7-STABLE FreeBSD 4.7-STABLE #0: Fri Feb 14 
> 12:04:07 CST 2003 root@wfdb.gddsn.org.cn:/usr/obj/usr/src/sys/WFDB i386
>
>
>
>
>
> To Unsubscribe: send mail to majordomo@FreeBSD.org
> with "unsubscribe freebsd-java" in the body of the message
>
>
oh, btw, I use gcc3.2.2 under CURRENT do not have this problem, so I 
think use gcc322 to compile jdk13 should be ok.
I will try it later.

--hwh.



To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-java" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?3E4E7CC5.8040400>