[Bug target/37581] IEEE inexact-flag not working on the Alpha

2009-02-03 Thread ubizjak at gmail dot com


--- Comment #7 from ubizjak at gmail dot com  2009-02-03 11:10 ---
Not a GCC bug.


-- 

ubizjak at gmail dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37581



[Bug target/37581] IEEE inexact-flag not working on the Alpha

2009-01-24 Thread bagnara at cs dot unipr dot it


--- Comment #4 from bagnara at cs dot unipr dot it  2009-01-24 08:08 ---
I don't know why the bug was closed: I can confirm the erroneous behavior is
present also in GCC 4.3.2.


-- 

bagnara at cs dot unipr dot it changed:

   What|Removed |Added

 Status|RESOLVED|UNCONFIRMED
 Resolution|INVALID |


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37581



[Bug target/37581] IEEE inexact-flag not working on the Alpha

2009-01-24 Thread ubizjak at gmail dot com


--- Comment #5 from ubizjak at gmail dot com  2009-01-24 10:17 ---
(In reply to comment #4)
 I don't know why the bug was closed: I can confirm the erroneous behavior is
 present also in GCC 4.3.2.

Because it looks to me that this is libc problem with fetestexcept. As far as
the compiler is concerned, GCC correctly decorates trapping instructions with
/sui and puts trap barrier to expected place:

...
jsr $26,($27),__nldbl_printf!lituse_jsr!5
ldah $29,0($26) !gpdisp!6
divs/sui $f3,$f2,$f0
trapb
...


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37581



[Bug target/37581] IEEE inexact-flag not working on the Alpha

2009-01-24 Thread abramobagnara at tin dot it


--- Comment #6 from abramobagnara at tin dot it  2009-01-24 15:41 ---
(In reply to comment #5)

 Because it looks to me that this is libc problem with fetestexcept. As far as
 the compiler is concerned, GCC correctly decorates trapping instructions with
 /sui and puts trap barrier to expected place:
 
 ...
 jsr $26,($27),__nldbl_printf!lituse_jsr!5
 ldah $29,0($26) !gpdisp!6
 divs/sui $f3,$f2,$f0
 trapb
 ...

I've reported a bug according to the valuable info you provide.

http://sourceware.org/bugzilla/show_bug.cgi?id=9783


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37581



[Bug target/37581] IEEE inexact-flag not working on the Alpha

2009-01-23 Thread ubizjak at gmail dot com


--- Comment #2 from ubizjak at gmail dot com  2009-01-23 08:47 ---
Works for me with:

--cut here--
#define _GNU_SOURCE
#include fenv.h
#include signal.h
#include stdlib.h

static void foo (int sig)
{
  exit (0);
}

float __attribute__((noinline)) test (float x) { return 2.0f / x; };

int main()
{
  volatile float x;

  signal (SIGFPE, foo);

  feclearexcept (FE_ALL_EXCEPT);
  feenableexcept (FE_INEXACT);

  x = test (3.0f);

  abort ();
}
--cut here--

$ gcc -O2 -lm -mieee-with-inexact sf.c
$ ./a.out
$


-- 

ubizjak at gmail dot com changed:

   What|Removed |Added

 Status|UNCONFIRMED |RESOLVED
 Resolution||INVALID


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37581



[Bug target/37581] IEEE inexact-flag not working on the Alpha

2009-01-23 Thread abramobagnara at tin dot it


--- Comment #3 from abramobagnara at tin dot it  2009-01-24 05:43 ---
The test case you have used it's different from the original that showed the
bug.

Nevertheless it's useful to understand the possible nature of the bug.

It seems that if feenableexcept(FE_INEXACT) is not called
fetestexcept(FE_INEXACT) doesn't work as expected (and as C99 standard
provides).

Please note that according to documentation GNU extension
feenableexcept/fedisablexcept does not enable/disable inexact detection, but
does enable/disable inexact *trapping* via SIGFPE signal.

Here below there is a new test case that shows the wrong behaviour.

$ cat sf2.c 
#define _GNU_SOURCE
#include fenv.h
#include signal.h
#include stdio.h

static void foo (int sig)
{
  printf(inexact\n);
}


float __attribute__((noinline)) test (float x) {
printf(%f / %f\n, 2.0f, x);
return 2.0f / x;
}

void t()
{
  volatile float x;
  feclearexcept (FE_ALL_EXCEPT);
  x = test (3.0f);
  printf(fetestexcept(FE_INEXACT) = %d\n, fetestexcept(FE_INEXACT));
  feclearexcept (FE_ALL_EXCEPT);
  x = test (2.0f);
  printf(fetestexcept(FE_INEXACT) = %d\n, fetestexcept(FE_INEXACT));
}

int main() {
  printf(\nWith FE_INEXACT SIGFPE disabled\n);
  t();

  printf(\nWith FE_INEXACT SIGFPE enabled\n);
  signal (SIGFPE, foo);
  feenableexcept (FE_INEXACT);
  t();
}
$ gcc -O2 -lm -mieee-with-inexact sf2.c
$ ./a.out

With FE_INEXACT SIGFPE disabled
2.00 / 3.00
fetestexcept(FE_INEXACT) = 0
2.00 / 2.00
fetestexcept(FE_INEXACT) = 0

With FE_INEXACT SIGFPE enabled
2.00 / 3.00
inexact
fetestexcept(FE_INEXACT) = 2097152
2.00 / 2.00
fetestexcept(FE_INEXACT) = 0
$


-- 

abramobagnara at tin dot it changed:

   What|Removed |Added

 CC||abramobagnara at tin dot it


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37581



[Bug target/37581] IEEE inexact-flag not working on the Alpha

2008-09-19 Thread bagnara at cs dot unipr dot it


--- Comment #1 from bagnara at cs dot unipr dot it  2008-09-19 07:04 ---
Created an attachment (id=16359)
 -- (http://gcc.gnu.org/bugzilla/attachment.cgi?id=16359action=view)
Assembly code generated with g++ -S -mieee-with-inexact sf.cc


-- 


http://gcc.gnu.org/bugzilla/show_bug.cgi?id=37581