diff options
author | Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2014-07-09 20:32:12 +0000 |
---|---|---|
committer | François-Xavier Coudert <fxcoudert@gcc.gnu.org> | 2014-07-09 20:32:12 +0000 |
commit | f5168e47a83d6afcab6afa176da2ba466c383dbb (patch) | |
tree | cf7f1ee923c572de4622014e7f1078228cf3f283 /gcc | |
parent | 958c1d61b1503a70f900a38f6f832ec1beb29d8f (diff) | |
download | gcc-f5168e47a83d6afcab6afa176da2ba466c383dbb.zip gcc-f5168e47a83d6afcab6afa176da2ba466c383dbb.tar.gz gcc-f5168e47a83d6afcab6afa176da2ba466c383dbb.tar.bz2 |
libgfortran.h (support_fpu_underflow_control, [...]): New prototypes.
* libgfortran.h (support_fpu_underflow_control,
get_fpu_underflow_mode, set_fpu_underflow_mode): New prototypes.
* config/fpu-*.h (support_fpu_underflow_control,
get_fpu_underflow_mode, set_fpu_underflow_mode):
New functions.
* ieee/ieee_arithmetic.F90: Support underflow control.
* gfortran.dg/ieee/underflow_1.f90: New file.
From-SVN: r212407
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/ieee/underflow_1.f90 | 50 |
2 files changed, 54 insertions, 0 deletions
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index b2e6a01..e4cd3bc 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2014-07-09 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org> + + * gfortran.dg/ieee/underflow_1.f90: New file. + 2014-07-09 Richard Biener <rguenther@suse.de> PR c-family/61741 diff --git a/gcc/testsuite/gfortran.dg/ieee/underflow_1.f90 b/gcc/testsuite/gfortran.dg/ieee/underflow_1.f90 new file mode 100644 index 0000000..b77a90c --- /dev/null +++ b/gcc/testsuite/gfortran.dg/ieee/underflow_1.f90 @@ -0,0 +1,50 @@ +! { dg-do run } +! { dg-require-effective-target sse2_runtime { target { i?86-*-* x86_64-*-* } } } +! { dg-additional-options "-msse2 -mfpmath=sse" { target { i?86-*-* x86_64-*-* } } } + +program test_underflow_control + use ieee_arithmetic + use iso_fortran_env + + logical l + real, volatile :: x + double precision, volatile :: y + integer, parameter :: kx = kind(x), ky = kind(y) + + if (ieee_support_underflow_control(x)) then + + x = tiny(x) + call ieee_set_underflow_mode(.true.) + x = x / 2000._kx + if (x == 0) call abort + call ieee_get_underflow_mode(l) + if (.not. l) call abort + + x = tiny(x) + call ieee_set_underflow_mode(.false.) + x = x / 2000._kx + if (x > 0) call abort + call ieee_get_underflow_mode(l) + if (l) call abort + + end if + + if (ieee_support_underflow_control(y)) then + + y = tiny(y) + call ieee_set_underflow_mode(.true.) + y = y / 2000._ky + if (y == 0) call abort + call ieee_get_underflow_mode(l) + if (.not. l) call abort + + y = tiny(y) + call ieee_set_underflow_mode(.false.) + y = y / 2000._ky + if (y > 0) call abort + call ieee_get_underflow_mode(l) + if (l) call abort + + end if + +end program |