PR libfortran/pr68867

2015-12-14  Jerry DeLisle  <jvdelisle@gcc.gnu.org>

	PR libfortran/pr68867
	* io/write.c (set_fnode_default): For kind=16, set the decimal precision
	depending on the platform binary precision, 106 or 113.

From-SVN: r231639
This commit is contained in:
Jerry DeLisle 2015-12-15 03:16:26 +00:00
parent 060eb4c9a4
commit 8d3586e4e2
4 changed files with 23 additions and 5 deletions

View File

@ -1,3 +1,7 @@
2015-12-14svn commit Jerry DeLisle <jvdelisle@gcc.gnu.org>
* gfortran.dg/quad_2.f90: Update test.
2015-12-14 Steve Ellcey <sellcey@imgtec.com>
* gcc.dg/tree-ssa/ssa-fre-4.c: Remove mips*-*-* target.

View File

@ -49,18 +49,19 @@ program test_qp
if (str4 /= "1.41421356237309504876") call abort()
case (16)
if (str1 /= " 1.00000000000000000000000000000000000") call abort()
if (str2 /= "1.00000000000000000000000000000000000") call abort()
if (digits(1.0_qp) == 113) then
! IEEE 754 binary 128 format
! e.g. libquadmath/__float128 on i686/x86_64/ia64
if (str1 /= " 1.00000000000000000000000000000000000") call abort()
if (str2 /= "1.00000000000000000000000000000000000") call abort()
if (str3 /= " 1.41421356237309504880168872420969798") call abort()
if (str4 /= "1.41421356237309504880168872420969798") call abort()
else if (digits(1.0_qp) == 106) then
! IBM binary 128 format
if (str3(1:37) /= " 1.41421356237309504880168872420969") call abort()
if (str4(1:34) /= "1.41421356237309504880168872420969") call abort()
if (str1 /= " 1.0000000000000000000000000000000") call abort()
if (str2 /= "1.0000000000000000000000000000000") call abort()
if (str3(1:37) /= " 1.4142135623730950488016887242097") call abort()
if (str4(1:34) /= "1.4142135623730950488016887242097") call abort()
end if
! Do a libm run-time test

View File

@ -1,3 +1,9 @@
2015-12-14 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR libfortran/pr68867
* io/write.c (set_fnode_default): For kind=16, set the decimal precision
depending on the platform binary precision, 106 or 113.
2015-12-05 Juoko Orava <jouko.orava@iki.fi>
PR fortran/50201

View File

@ -1405,9 +1405,16 @@ set_fnode_default (st_parameter_dt *dtp, fnode *f, int length)
f->u.real.e = 4;
break;
case 16:
/* Adjust decimal precision depending on binary precision, 106 or 113. */
#if GFC_REAL_16_DIGITS == 113
f->u.real.w = 45;
f->u.real.d = 36;
f->u.real.e = 4;
#else
f->u.real.w = 41;
f->u.real.d = 32;
f->u.real.e = 4;
#endif
break;
default:
internal_error (&dtp->common, "bad real kind");