Linux PARISC architecture development
 help / color / mirror / Atom feed
* [parisc-linux] TLS toolchain update (6 regressions left)
@ 2005-07-15 14:26 Carlos O'Donell
  2005-07-15 23:44 ` [parisc-linux] Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression) Carlos O'Donell
  2005-07-17 16:21 ` [parisc-linux] TLS toolchain update (6 regressions left) Carlos O'Donell
  0 siblings, 2 replies; 15+ messages in thread
From: Carlos O'Donell @ 2005-07-15 14:26 UTC (permalink / raw)
  To: John David Anglin, Randolph Chung, parisc-linux


Please stand up and pat yourself on the back:

make[2]: *** [/glibc/math/test-fenv.out] Error 1
	= Regression (1)
make[2]: *** [/glibc/math/test-float.out] Error 1
make[2]: *** [/glibc/math/test-double.out] Error 1
make[2]: *** [/glibc/math/test-ifloat.out] Error 1
make[2]: *** [/glibc/math/test-idouble.out] Error 1
make[1]: *** [math/tests] Error 2
make[2]: *** [/glibc/stdlib/tst-strtod.out] Error 1
make[2]: *** [/glibc/stdlib/bug-strtod.out] Error 1
make[1]: *** [stdlib/tests] Error 2
make[2]: [/glibc/posix/annexc.out] Error 1 (ignored)
make[2]: *** [/glibc/elf/tst-array1.out] Error 1
make[2]: *** [/glibc/elf/tst-array2.out] Error 1
make[2]: *** [/glibc/elf/tst-array3.out] Error 1
make[2]: *** [/glibc/elf/tst-array4.out] Error 1
make[2]: *** [/glibc/elf/tst-array1-static.out] Error 1
	= Regressions (5)
make[2]: *** [/glibc/elf/tst-tls13.out] Error 1
	= TIMEOUTFACTOR=10 required.
make[1]: *** [elf/tests] Error 2
make: *** [check] Error 2

That's 6 regressions for the C Library, which I'll target over the next
couple of weeks.

The last big error was that glibc was considering the build a
cross-compile and the environment just puked.

Cheers,
Carlos.
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [parisc-linux] Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-15 14:26 [parisc-linux] TLS toolchain update (6 regressions left) Carlos O'Donell
@ 2005-07-15 23:44 ` Carlos O'Donell
  2005-07-16  0:08   ` [parisc-linux] " John David Anglin
  2005-07-17 16:21 ` [parisc-linux] TLS toolchain update (6 regressions left) Carlos O'Donell
  1 sibling, 1 reply; 15+ messages in thread
From: Carlos O'Donell @ 2005-07-15 23:44 UTC (permalink / raw)
  To: John David Anglin, Randolph Chung, parisc-linux

On Fri, Jul 15, 2005 at 10:26:10AM -0400, Carlos O'Donell wrote:
> make[2]: *** [/glibc/math/test-fenv.out] Error 1
> 	= Regression (1)
> make[2]: *** [/glibc/math/test-float.out] Error 1
> make[2]: *** [/glibc/math/test-double.out] Error 1
> make[2]: *** [/glibc/math/test-ifloat.out] Error 1
> make[2]: *** [/glibc/math/test-idouble.out] Error 1
> make[1]: *** [math/tests] Error 2
> make[2]: *** [/glibc/stdlib/tst-strtod.out] Error 1
> make[2]: *** [/glibc/stdlib/bug-strtod.out] Error 1
> make[1]: *** [stdlib/tests] Error 2
> make[2]: [/glibc/posix/annexc.out] Error 1 (ignored)
> make[2]: *** [/glibc/elf/tst-array1.out] Error 1
> make[2]: *** [/glibc/elf/tst-array2.out] Error 1
> make[2]: *** [/glibc/elf/tst-array3.out] Error 1
> make[2]: *** [/glibc/elf/tst-array4.out] Error 1
> make[2]: *** [/glibc/elf/tst-array1-static.out] Error 1
> 	= Regressions (5)
> make[2]: *** [/glibc/elf/tst-tls13.out] Error 1
> 	= TIMEOUTFACTOR=10 required.
> make[1]: *** [elf/tests] Error 2
> make: *** [check] Error 2

Fixed binutils...

Make that 1 regression:

make[2]: *** [/glibc/math/test-fenv.out] Error 1
make[2]: *** [/glibc/math/test-float.out] Error 1
make[2]: *** [/glibc/math/test-double.out] Error 1
make[2]: *** [/glibc/math/test-ifloat.out] Error 1
make[2]: *** [/glibc/math/test-idouble.out] Error 1
make[1]: *** [math/tests] Error 2
make[2]: *** [/glibc/stdlib/tst-strtod.out] Error 1
make[2]: *** [/glibc/stdlib/bug-strtod.out] Error 1
make[1]: *** [stdlib/tests] Error 2
make[2]: [/glibc/posix/annexc.out] Error 1 (ignored)
make: *** [check] Error 2

However, the following is troubling and where trouble goes, so does the
blame on the compiler.

test-float.out (Non-inline float):
 Test suite completed:
   2599 test cases plus 2384 tests for exception flags executed.
-  39 errors occurred.
+  4363 errors occurred.

test-double.out (Non-inline double):
 Test suite completed:
   2624 test cases plus 2399 tests for exception flags executed.
-  38 errors occurred.
+  4388 errors occurred.

Although the numbers don't add up with the errors a cursory check shows
*none* of the non-inline math tests passed.

The inline math does *much* better, observe:

test-ifloat.out (Inline float):
 Test suite completed:
   2537 test cases plus 2322 tests for exception flags executed.
-  1 errors occurred.
+  11 errors occurred.

test-idbouble.out (Inline double):
 Test suite completed:
   2562 test cases plus 2337 tests for exception flags executed.
-  1 errors occurred.
+  10 errors occurred.


c.

_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-15 23:44 ` [parisc-linux] Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression) Carlos O'Donell
@ 2005-07-16  0:08   ` John David Anglin
  2005-07-16  0:57     ` Carlos O'Donell
  0 siblings, 1 reply; 15+ messages in thread
From: John David Anglin @ 2005-07-16  0:08 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: parisc-linux, tausq

> However, the following is troubling and where trouble goes, so does the
> blame on the compiler.
> 
> test-float.out (Non-inline float):
>  Test suite completed:
>    2599 test cases plus 2384 tests for exception flags executed.
> -  39 errors occurred.
> +  4363 errors occurred.
> 
> test-double.out (Non-inline double):
>  Test suite completed:
>    2624 test cases plus 2399 tests for exception flags executed.
> -  38 errors occurred.
> +  4388 errors occurred.
> 
> Although the numbers don't add up with the errors a cursory check shows
> *none* of the non-inline math tests passed.

I don't want to throw stones but I posted a message to parisc two
days ago indicating that we have at least one kernel bug in its math
emulation ;)

Ok, PA 2.0 support could be suspect.  I doubt very much there are
major FP issues with PA 1.1.  In PA 1.1, essentially all the operations
are supported in hardware (I hate assist).  There's an issue with
complex support using PA 1.0 but if the compiler didn't die that's
not likely the problem.  That's fixed in main.  Finally, you've got
the glibc issue in handling 64-bit long doubles.  I would suspect a
glibc issue first.  GCC doesn't have much to do with exception support
or control of rounding modes, although you would think the compiler
would need to know about rounding mode.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16  0:08   ` [parisc-linux] " John David Anglin
@ 2005-07-16  0:57     ` Carlos O'Donell
  2005-07-16  1:14       ` Carlos O'Donell
  0 siblings, 1 reply; 15+ messages in thread
From: Carlos O'Donell @ 2005-07-16  0:57 UTC (permalink / raw)
  To: John David Anglin; +Cc: parisc-linux, tausq

On Fri, Jul 15, 2005 at 08:08:43PM -0400, John David Anglin wrote:
> > However, the following is troubling and where trouble goes, so does the
> > blame on the compiler.
> > 
> > test-float.out (Non-inline float):
> >  Test suite completed:
> >    2599 test cases plus 2384 tests for exception flags executed.
> > -  39 errors occurred.
> > +  4363 errors occurred.
> > 
> > test-double.out (Non-inline double):
> >  Test suite completed:
> >    2624 test cases plus 2399 tests for exception flags executed.
> > -  38 errors occurred.
> > +  4388 errors occurred.
> > 
> > Although the numbers don't add up with the errors a cursory check shows
> > *none* of the non-inline math tests passed.
> 
> I don't want to throw stones but I posted a message to parisc two
> days ago indicating that we have at least one kernel bug in its math
> emulation ;)

I knew I'd draw you ire if I blamed the compiler! :)
 
> Ok, PA 2.0 support could be suspect.  I doubt very much there are
> major FP issues with PA 1.1.  In PA 1.1, essentially all the operations
> are supported in hardware (I hate assist).  There's an issue with
> complex support using PA 1.0 but if the compiler didn't die that's
> not likely the problem.  That's fixed in main.  Finally, you've got
> the glibc issue in handling 64-bit long doubles.  I would suspect a
> glibc issue first.  GCC doesn't have much to do with exception support
> or control of rounding modes, although you would think the compiler
> would need to know about rounding mode.

I'm only testing float and double support, I have temporarily disabled
long double support for hppa during testing.

I don't quite understand how something like "fpclassify" can *ever* fail
under any implementation.

Could you review these files:
http://cvs.parisc-linux.org/glibc/sysdeps/hppa/fpu/

With an eye to correct asm statement? If these don't work then it all
goes down the tubes. I'm sure gcc is probably doing the right thing and
that asm is doing the wrong thing.

c.

_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16  0:57     ` Carlos O'Donell
@ 2005-07-16  1:14       ` Carlos O'Donell
  2005-07-16  1:54         ` John David Anglin
  0 siblings, 1 reply; 15+ messages in thread
From: Carlos O'Donell @ 2005-07-16  1:14 UTC (permalink / raw)
  To: John David Anglin; +Cc: tausq, parisc-linux

On Fri, Jul 15, 2005 at 08:57:15PM -0400, Carlos O'Donell wrote:
> I don't quite understand how something like "fpclassify" can *ever* fail
> under any implementation.
> 
> Could you review these files:
> http://cvs.parisc-linux.org/glibc/sysdeps/hppa/fpu/
> 
> With an eye to correct asm statement? If these don't work then it all
> goes down the tubes. I'm sure gcc is probably doing the right thing and
> that asm is doing the wrong thing.

I think gcc is to blame, or the constraints in the assembly?

--- GCC 4.0 ---

0x40349890 <feclearexcept+0>:   ldo 40(sp),sp
0x40349894 <feclearexcept+4>:   ldo -38(sp),ret0
0x40349898 <feclearexcept+8>:   stw r19,-20(,sp)
0x4034989c <feclearexcept+12>:  fstd fr0,0(,ret0)
0x403498a0 <feclearexcept+16>:  fldd 0(,ret0),fr0
0x403498a4 <feclearexcept+20>:  ldi 0,ret0
0x403498a8 <feclearexcept+24>:  bv r0(rp)
0x403498ac <feclearexcept+28>:  ldo -40(sp),sp

Notice that it thinks the argument is on the stack? Are the assembly
constraints confusing gcc?

The above is competely bogus.

--- GCC 3.3.5 ---

00000000 <feclearexcept>:
   0:   37 de 00 80     ldo 40(sp),sp
   4:   d7 5a 0b 7b     depw,z r26,4,5,r26
   8:   6b d3 3f c1     stw r19,-20(,sp)
   c:   37 d4 3f 91     ldo -38(sp),r20
  10:   2e 80 12 00     fstd fr0,0(,r20)
  14:   4b d5 3f 91     ldw -38(,sp),r21
  18:   0b 55 00 1a     andcm r21,r26,r26
  1c:   6b da 3f 91     stw r26,-38(,sp)
  20:   2e 80 10 00     fldd 0(,r20),fr0
  24:   34 1c 00 00     ldi 0,ret0
  28:   e8 40 c0 00     bv r0(rp)
  2c:   37 de 3f 81     ldo -40(sp),sp

This one properly loads the value from r26.
This one works.

c.

_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16  1:14       ` Carlos O'Donell
@ 2005-07-16  1:54         ` John David Anglin
  2005-07-16 18:38           ` Carlos O'Donell
  0 siblings, 1 reply; 15+ messages in thread
From: John David Anglin @ 2005-07-16  1:54 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: tausq, parisc-linux

> I think gcc is to blame, or the constraints in the assembly?
> 
> --- GCC 4.0 ---
> 
> 0x40349890 <feclearexcept+0>:   ldo 40(sp),sp
> 0x40349894 <feclearexcept+4>:   ldo -38(sp),ret0
> 0x40349898 <feclearexcept+8>:   stw r19,-20(,sp)
> 0x4034989c <feclearexcept+12>:  fstd fr0,0(,ret0)
> 0x403498a0 <feclearexcept+16>:  fldd 0(,ret0),fr0
> 0x403498a4 <feclearexcept+20>:  ldi 0,ret0
> 0x403498a8 <feclearexcept+24>:  bv r0(rp)
> 0x403498ac <feclearexcept+28>:  ldo -40(sp),sp

PR time.  Please add danglin@gcc.gnu.org to the CC list.

> Notice that it thinks the argument is on the stack? Are the assembly
> constraints confusing gcc?

Probably, but its not clear at the moment.  I think the asm's need
the volatile keyword as they have side effects that aren't known to
gcc (i.e., scheduling might move a floating point operation past
the asm's should the functions be inlined.

Taking a quick look, I see the and has been removed from the initial
rtl generation.  So, this is a tree optimization bug.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16  1:54         ` John David Anglin
@ 2005-07-16 18:38           ` Carlos O'Donell
  2005-07-16 19:15             ` John David Anglin
  0 siblings, 1 reply; 15+ messages in thread
From: Carlos O'Donell @ 2005-07-16 18:38 UTC (permalink / raw)
  To: John David Anglin; +Cc: tausq, parisc-linux

On Fri, Jul 15, 2005 at 09:54:25PM -0400, John David Anglin wrote:
> > I think gcc is to blame, or the constraints in the assembly?
> > 
> > --- GCC 4.0 ---
> > 
> > 0x40349890 <feclearexcept+0>:   ldo 40(sp),sp
> > 0x40349894 <feclearexcept+4>:   ldo -38(sp),ret0
> > 0x40349898 <feclearexcept+8>:   stw r19,-20(,sp)
> > 0x4034989c <feclearexcept+12>:  fstd fr0,0(,ret0)
> > 0x403498a0 <feclearexcept+16>:  fldd 0(,ret0),fr0
> > 0x403498a4 <feclearexcept+20>:  ldi 0,ret0
> > 0x403498a8 <feclearexcept+24>:  bv r0(rp)
> > 0x403498ac <feclearexcept+28>:  ldo -40(sp),sp
> 
> PR time.  Please add danglin@gcc.gnu.org to the CC list.
> 
> > Notice that it thinks the argument is on the stack? Are the assembly
> > constraints confusing gcc?
> 
> Probably, but its not clear at the moment.  I think the asm's need
> the volatile keyword as they have side effects that aren't known to
> gcc (i.e., scheduling might move a floating point operation past
> the asm's should the functions be inlined.

I hadn't considered the effects of rescheduling. I guess this can happen
to any code between the asm statements.

c.
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16 18:38           ` Carlos O'Donell
@ 2005-07-16 19:15             ` John David Anglin
  2005-07-16 19:16               ` Carlos O'Donell
  0 siblings, 1 reply; 15+ messages in thread
From: John David Anglin @ 2005-07-16 19:15 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: tausq, parisc-linux

> I hadn't considered the effects of rescheduling. I guess this can happen
> to any code between the asm statements.

As long as the dependencies are correct, then then shouldn't happen.
Possibly, adding a dependency on register "CCFP" is what's needed.
I don't know if that actually works but it's how we handle floating-point
condition codes internally.  I think that would allow inlining of these
routines in code that does floating-point compares and tests.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16 19:15             ` John David Anglin
@ 2005-07-16 19:16               ` Carlos O'Donell
  2005-07-16 19:48                 ` John David Anglin
  0 siblings, 1 reply; 15+ messages in thread
From: Carlos O'Donell @ 2005-07-16 19:16 UTC (permalink / raw)
  To: John David Anglin; +Cc: tausq, parisc-linux

On Sat, Jul 16, 2005 at 03:15:34PM -0400, John David Anglin wrote:
> > I hadn't considered the effects of rescheduling. I guess this can happen
> > to any code between the asm statements.
> 
> As long as the dependencies are correct, then then shouldn't happen.
> Possibly, adding a dependency on register "CCFP" is what's needed.
> I don't know if that actually works but it's how we handle floating-point
> condition codes internally.  I think that would allow inlining of these
> routines in code that does floating-point compares and tests.

What sort of dependancy on CCFP? Do you have an example somewhere?

c.

_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16 19:16               ` Carlos O'Donell
@ 2005-07-16 19:48                 ` John David Anglin
  2005-07-16 20:13                   ` Carlos O'Donell
  0 siblings, 1 reply; 15+ messages in thread
From: John David Anglin @ 2005-07-16 19:48 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: tausq, parisc-linux

> What sort of dependancy on CCFP? Do you have an example somewhere?

No.

  If your assembler instruction can alter the condition code register, add
  @samp{cc} to the list of clobbered registers.  GCC on some machines
  represents the condition codes as a specific hardware register;
  @samp{cc} serves to name this register.  On other machines, the
  condition code is handled differently, and specifying @samp{cc} has no
  effect.  But it is valid no matter what the machine.

Thinking a little more, I believe specifying "r0" in the clobber list
of the asm will do the job.  Register 0 is used to hold condition codes
for both integer and floating point comparisons.  I don't think there's
a way to express that the register is only used.  There's no constraint
letter for r0, etc.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16 19:48                 ` John David Anglin
@ 2005-07-16 20:13                   ` Carlos O'Donell
  2005-07-16 20:29                     ` John David Anglin
  0 siblings, 1 reply; 15+ messages in thread
From: Carlos O'Donell @ 2005-07-16 20:13 UTC (permalink / raw)
  To: John David Anglin; +Cc: tausq, parisc-linux

On Sat, Jul 16, 2005 at 03:48:10PM -0400, John David Anglin wrote:
> > What sort of dependancy on CCFP? Do you have an example somewhere?
> 
> No.
> 
>   If your assembler instruction can alter the condition code register, add
>   @samp{cc} to the list of clobbered registers.  GCC on some machines
>   represents the condition codes as a specific hardware register;
>   @samp{cc} serves to name this register.  On other machines, the
>   condition code is handled differently, and specifying @samp{cc} has no
>   effect.  But it is valid no matter what the machine.
> 
> Thinking a little more, I believe specifying "r0" in the clobber list
> of the asm will do the job.  Register 0 is used to hold condition codes
> for both integer and floating point comparisons.  I don't think there's
> a way to express that the register is only used.  There's no constraint
> letter for r0, etc.

Will this ever happen during inlining?

fstd chain -> memory
operation 1
			fstd chain -> memory
fldd chain -> regs
			operation 2
			fldd chain -> regs

Operation 2 could trap when expected that it couldn't because the fstd
had cleared the traps.

c.

_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16 20:13                   ` Carlos O'Donell
@ 2005-07-16 20:29                     ` John David Anglin
  2005-07-16 21:18                       ` Carlos O'Donell
  0 siblings, 1 reply; 15+ messages in thread
From: John David Anglin @ 2005-07-16 20:29 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: tausq, parisc-linux

> Will this ever happen during inlining?
> 
> fstd chain -> memory
> operation 1
> 			fstd chain -> memory
> fldd chain -> regs
> 			operation 2
> 			fldd chain -> regs
> 
> Operation 2 could trap when expected that it couldn't because the fstd
> had cleared the traps.

I guess clobbering all the fp registers plus r0 will stop this.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16 20:29                     ` John David Anglin
@ 2005-07-16 21:18                       ` Carlos O'Donell
  2005-07-16 22:55                         ` John David Anglin
  0 siblings, 1 reply; 15+ messages in thread
From: Carlos O'Donell @ 2005-07-16 21:18 UTC (permalink / raw)
  To: John David Anglin; +Cc: tausq, parisc-linux

On Sat, Jul 16, 2005 at 04:29:54PM -0400, John David Anglin wrote:
> > Will this ever happen during inlining?
> > 
> > fstd chain -> memory
> > operation 1
> > 			fstd chain -> memory
> > fldd chain -> regs
> > 			operation 2
> > 			fldd chain -> regs
> > 
> > Operation 2 could trap when expected that it couldn't because the fstd
> > had cleared the traps.
> 
> I guess clobbering all the fp registers plus r0 will stop this.

That seems like overkill, I just don't want gcc schedule between the asm
statements. The fstd chain, and fldd chain are always asm statements.

Is there no other way? Clobbering will add huge register pressure and
force gcc to spill all the fpregs and restore after the call.

c.

_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] Re: Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression).
  2005-07-16 21:18                       ` Carlos O'Donell
@ 2005-07-16 22:55                         ` John David Anglin
  0 siblings, 0 replies; 15+ messages in thread
From: John David Anglin @ 2005-07-16 22:55 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: tausq, parisc-linux

> > I guess clobbering all the fp registers plus r0 will stop this.
> 
> That seems like overkill, I just don't want gcc schedule between the asm
> statements. The fstd chain, and fldd chain are always asm statements.
> 
> Is there no other way? Clobbering will add huge register pressure and
> force gcc to spill all the fpregs and restore after the call.

Hmmm, this seems tricky:

  For example, on many targets there is a system
  register which can be set to control the rounding mode of
  floating point operations.  You might try
  setting it with a volatile @code{asm}, like this PowerPC example:

  @smallexample
	asm volatile("mtfsf 255,%0" : : "f" (fpenv));
	sum = x + y;
  @end smallexample

  @noindent
  This will not work reliably, as the compiler may move the addition back
  before the volatile @code{asm}.  To make it work you need to add an
  artificial dependency to the @code{asm} referencing a variable in the code
  you don't want moved, for example:

  @smallexample
	asm volatile ("mtfsf 255,%1" : "=X"(sum): "f"(fpenv));
	sum = x + y;
  @end smallexample

  ...

  For reasons similar to those described above, it is not possible to give
  an assembler instruction access to the condition code left by previous
  instructions.

If you clobber memory in the asm, then I think it will be a barrier
for memory accesses.  I think a function call is ok:

  a = b + c;
  z = xyzzy ();

I don't think gcc can reorder the two operations unless it can prove
the function is pure and doesn't write all memory.

Dave
-- 
J. David Anglin                                  dave.anglin@nrc-cnrc.gc.ca
National Research Council of Canada              (613) 990-0752 (FAX: 952-6602)
_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

* Re: [parisc-linux] TLS toolchain update (6 regressions left)
  2005-07-15 14:26 [parisc-linux] TLS toolchain update (6 regressions left) Carlos O'Donell
  2005-07-15 23:44 ` [parisc-linux] Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression) Carlos O'Donell
@ 2005-07-17 16:21 ` Carlos O'Donell
  1 sibling, 0 replies; 15+ messages in thread
From: Carlos O'Donell @ 2005-07-17 16:21 UTC (permalink / raw)
  To: John David Anglin, Randolph Chung, parisc-linux

On Fri, Jul 15, 2005 at 10:26:10AM -0400, Carlos O'Donell wrote:
> Please stand up and pat yourself on the back:
> 
> make[2]: *** [/glibc/math/test-fenv.out] Error 1
> 	= Regression (1)
> make[2]: *** [/glibc/math/test-float.out] Error 1
> make[2]: *** [/glibc/math/test-double.out] Error 1
> make[2]: *** [/glibc/math/test-ifloat.out] Error 1
> make[2]: *** [/glibc/math/test-idouble.out] Error 1
> make[1]: *** [math/tests] Error 2
> make[2]: *** [/glibc/stdlib/tst-strtod.out] Error 1
> make[2]: *** [/glibc/stdlib/bug-strtod.out] Error 1
> make[1]: *** [stdlib/tests] Error 2
> make[2]: [/glibc/posix/annexc.out] Error 1 (ignored)
> make[2]: *** [/glibc/elf/tst-array1.out] Error 1
> make[2]: *** [/glibc/elf/tst-array2.out] Error 1
> make[2]: *** [/glibc/elf/tst-array3.out] Error 1
> make[2]: *** [/glibc/elf/tst-array4.out] Error 1
> make[2]: *** [/glibc/elf/tst-array1-static.out] Error 1
> 	= Regressions (5)
> make[2]: *** [/glibc/elf/tst-tls13.out] Error 1
> 	= TIMEOUTFACTOR=10 required.
> make[1]: *** [elf/tests] Error 2
> make: *** [check] Error 2

Patched up the floating point asm constraints.

make[2]: *** [/glibc/math/test-float.out] Error 1
make[2]: *** [/glibc/math/test-double.out] Error 1
make[2]: *** [/glibc/math/test-ifloat.out] Error 1
make[2]: *** [/glibc/math/test-idouble.out] Error 1
make[1]: *** [math/tests] Error 2
make[2]: *** [/glibc/stdlib/tst-strtod.out] Error 1
make[2]: *** [/glibc/stdlib/bug-strtod.out] Error 1
make[1]: *** [stdlib/tests] Error 2
make[2]: [/glibc/posix/annexc.out] Error 1 (ignored)
make: *** [check] Error 2

No regressions. But we still have a couple of functions that look like
the math is a bit wrong. However, we are doing better than non-tls, I
figure because the constraints are still a bit wrong.


----- GCC 4.0 (glibc + fp constriant fix + tls) -----
==> test-double.out <==

Test suite completed:
  2624 test cases plus 2399 tests for exception flags executed.
  24 errors occurred.

==> test-float.out <==

Test suite completed:
  2599 test cases plus 2384 tests for exception flags executed.
  23 errors occurred.

==> test-idouble.out <==

Test suite completed:
  2562 test cases plus 2337 tests for exception flags executed.
  10 errors occurred.

==> test-ifloat.out <==

Test suite completed:
  2537 test cases plus 2322 tests for exception flags executed.
  11 errors occurred.

----- GCC 3.3.5 (glibc) -----

==> test-double.out <==

Test suite completed:
  2624 test cases plus 2399 tests for exception flags executed.
  38 errors occurred.

==> test-float.out <==

Test suite completed:
  2599 test cases plus 2384 tests for exception flags executed.
  39 errors occurred.

==> test-idouble.out <==

Test suite completed:
  2562 test cases plus 2337 tests for exception flags executed.
  1 errors occurred.

==> test-ifloat.out <==

Test suite completed:
  2537 test cases plus 2322 tests for exception flags executed.
  1 errors occurred.

We are on par with the previous test results. I'm very pleased.
-----

Looking at the test failures in test-float, I see the following:

testing float (without inline functions)
Failure: Test: atan2 (-0.00756827042671106339, -.001792735857538728036)
== -1.80338464113663849327153994379639112
Result:
 is:         -1.80338394641876220703e+00  -0x1.cdaa9200000000000000p+0
 should be:  -1.80338466167449951172e+00  -0x1.cdaa9e00000000000000p+0
 difference:  7.15255737304687500000e-07   0x1.80000000000000000000p-21
 ulp       :  6.0000  
 max.ulp   :  0.0000  

I can't seem to fix this test, but I figure it's because I haven't
played enough with ulps settings that flag the test as failed.
The error is in the e-06 rang which really sucks. Any thoughts?

Next is a set of failures all related to "rint" for rounding an integer
to the correct value. The failures are very werid.

Failure: Test: rint (1.5) == 1.0
Result:
 is:          2.00000000000000000000e+00   0x1.00000000000000000000p+1
 should be:   1.00000000000000000000e+00   0x1.00000000000000000000p+0
 difference:  1.00000000000000000000e+00   0x1.00000000000000000000p+0
 ulp       :  8388608.0000
 max.ulp   :  0.0000  

That ulp is bogus? Not to mention that the rounding direction is wrong.

Lastly is:

Failure: Real part of: cacos (inf + NaN i) == NaN + inf i plus sign of zero/inf not specified: Exception "Invalid operation" set
Failure: Real part of: cacos (-inf + NaN i) == NaN + inf i plus sign of zero/inf not specified: Exception "Invalid operation" set
Failure: Real part of: cacos (NaN + inf i) == NaN - inf i: Exception "Invalid operation" set
Failure: Real part of: cacos (NaN - inf i) == NaN + inf i: Exception "Invalid operation" set
Failure: Real part of: cacos (NaN + NaN i) == NaN + NaN i: Exception "Invalid operation" set
Failure: Real part of: ccosh (inf + NaN i) == inf + NaN i: Exception "Invalid operation" set
Failure: Real part of: ccosh (-inf + NaN i) == inf + NaN i: Exception "Invalid operation" set
Failure: Real part of: cpow (NaN + NaN i, NaN + NaN i) == NaN + NaN i: Exception "Invalid operation" set
Failure: Real part of: csinh (0.0 + NaN i) == 0.0 + NaN i plus sign of zero/inf not specified: Exception "Invalid operation" set
Failure: Real part of: csinh (-0 + NaN i) == 0.0 + NaN i plus sign of zero/inf not specified: Exception "Invalid operation" set
Failure: Real part of: csinh (inf + NaN i) == inf + NaN i plus sign of zero/inf not specified: Exception "Invalid operation" set
Failure: Real part of: csinh (-inf + NaN i) == inf + NaN i plus sign of zero/inf not specified: Exception "Invalid operation" set

Which all looks like corner case tets for these functions and the processor
is raising an exception. I've never had a chance or desire to look at these
but I will when I have nothing better to do ;)

c.

_______________________________________________
parisc-linux mailing list
parisc-linux@lists.parisc-linux.org
http://lists.parisc-linux.org/mailman/listinfo/parisc-linux

^ permalink raw reply	[flat|nested] 15+ messages in thread

end of thread, other threads:[~2005-07-17 16:21 UTC | newest]

Thread overview: 15+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-07-15 14:26 [parisc-linux] TLS toolchain update (6 regressions left) Carlos O'Donell
2005-07-15 23:44 ` [parisc-linux] Non-inline math, and inline math broken, GCC to blame? (1 hppa tls toolchain regression) Carlos O'Donell
2005-07-16  0:08   ` [parisc-linux] " John David Anglin
2005-07-16  0:57     ` Carlos O'Donell
2005-07-16  1:14       ` Carlos O'Donell
2005-07-16  1:54         ` John David Anglin
2005-07-16 18:38           ` Carlos O'Donell
2005-07-16 19:15             ` John David Anglin
2005-07-16 19:16               ` Carlos O'Donell
2005-07-16 19:48                 ` John David Anglin
2005-07-16 20:13                   ` Carlos O'Donell
2005-07-16 20:29                     ` John David Anglin
2005-07-16 21:18                       ` Carlos O'Donell
2005-07-16 22:55                         ` John David Anglin
2005-07-17 16:21 ` [parisc-linux] TLS toolchain update (6 regressions left) Carlos O'Donell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox