From f5168e47a83d6afcab6afa176da2ba466c383dbb Mon Sep 17 00:00:00 2001 From: Francois-Xavier Coudert Date: Wed, 9 Jul 2014 20:32:12 +0000 Subject: 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 --- gcc/testsuite/ChangeLog | 4 +++ gcc/testsuite/gfortran.dg/ieee/underflow_1.f90 | 50 ++++++++++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 gcc/testsuite/gfortran.dg/ieee/underflow_1.f90 (limited to 'gcc') 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 + + * gfortran.dg/ieee/underflow_1.f90: New file. + 2014-07-09 Richard Biener 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 -- cgit v1.1