This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[PATCH applied], 3 PowerPC long double patches applied


This is just the combined patch of the last three patches that have been
approved for trunk.  I expanded the description in rs6000-modes.def of what the
3 128-bit floating point types are and why IFmode needs to be ordered above
KFmode and TFmode.

These patches were individually proposed in:
https://gcc.gnu.org/ml/gcc-patches/2018-06/msg00634.html
https://gcc.gnu.org/ml/gcc-patches/2018-06/msg00796.html
https://gcc.gnu.org/ml/gcc-patches/2018-06/msg00799.html

In terms of the tests, the following tests fail if you switch the default long
double format.  At the moment, I don't have the GLIBC that provides native
support for IEEE 128-bit long double:

C tests:
c-c++-common/dfp/cast.c				(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-11.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-2.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-3.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-4.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-5.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-6.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp.c			(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/pr39034.c			(_Decimal128 <-> IEEE 128-bit)
gcc.dg/nextafter-2.c				(needs updated GLIBC)
gcc.dg/torture/float128-nan.c			(I need to investigate this)
gcc.dg/tree-ssa/builtin-sprintf.c		(needs updated GLIBC)
gcc.dg/tree-ssa/vrp104.c			(I need to investigate this)
gcc.target/powerpc/clone1.c			(I have patches for this)
gcc.target/powerpc/clone2.c			(I have patches for this)
gcc.target/powerpc/divkc3-1.c			(I have patches for this)
gcc.target/powerpc/float128-3.c			(I have patches for this)
gcc.target/powerpc/float128-5.c			(I have patches for this)
gcc.target/powerpc/float128-complex-1.c		(I have patches for this)
gcc.target/powerpc/float128-mix.c		(I have patches for this)
gcc.target/powerpc/mulkc3-1.c			(I have patches for this)
gcc.target/powerpc/nan128-1.c			(I need to investigate this)
gcc.target/powerpc/pack02.c			(I have patches for this)
gcc.target/powerpc/pr57150.c			(I have patches for this)
gcc.target/powerpc/pr60203.c			(I have patches for this)
gcc.target/powerpc/pr67808.c			(I have patches for this)
gcc.target/powerpc/pr70117.c			(bug in isnormal on IEEE 128)
gcc.target/powerpc/pr78056-1.c			(I have patches for this)
gcc.target/powerpc/pr78056-3.c			(I have patches for this)
gcc.target/powerpc/pr80210-2.c			(I have patches for this)
gcc.target/powerpc/pr80210.c			(I have patches for this)
gcc.target/powerpc/pr85657-3.c			(I have patches for this)
gcc.target/powerpc/tfmode_off.c			(I have patches for this)

C++ tests:
c-c++-common/dfp/cast.c				(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-11.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-2.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-3.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-4.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-5.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp-6.c		(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/convert-bfp.c			(_Decimal128 <-> IEEE 128-bit)
c-c++-common/dfp/pr39034.c			(_Decimal128 <-> IEEE 128-bit)
g++.dg/cdce3.C					(needs updated GLIBC) 

The following Fortran tests fail.  I assume most of these are library issues:
gfortran.dg/erf_3.F90
gfortran.dg/fmt_en.f90
gfortran.dg/fmt_g0_7.f08
gfortran.dg/fmt_pf.f90
gfortran.dg/ieee/large_1.f90
gfortran.dg/ieee/large_3.F90
gfortran.dg/large_real_kind_1.f90
gfortran.dg/large_real_kind_2.F90
gfortran.dg/large_real_kind_3.F90
gfortran.dg/large_real_kind_form_io_1.f90
gfortran.dg/large_real_kind_form_io_2.f90
gfortran.dg/norm2_3.f90
gfortran.dg/quad_2.f90
gfortran.dg/round_2.f03

[gcc]
2018-06-18  Michael Meissner  <meissner@linux.ibm.com>

	PR target/85358
	* config/rs6000/rs6000-modes.def (toplevel): Rework the 128-bit
	floating point modes, so that IFmode is numerically greater than
	TFmode, which is greater than KFmode using FRACTIONAL_FLOAT_MODE
	to declare the ordering.  This prevents IFmode from being
	converted to TFmode when long double is IEEE 128-bit on an ISA 3.0
	machine.  Include rs6000-modes.h to share the fractional values
	between genmodes* and the rest of the compiler.
	(IFmode): Likewise.
	(KFmode): Likewise.
	(TFmode): Likewise.
	* config/rs6000/rs6000-modes.h: New file.
	* config/rs6000/rs6000.c (rs6000_debug_reg_global): Change the
	meaning of rs6000_long_double_size so that 126..128 selects an
	appropriate 128-bit floating point type.
	(rs6000_option_override_internal): Likewise.
	* config/rs6000/rs6000.h (toplevel): Include rs6000-modes.h.
	(TARGET_LONG_DOUBLE_128): Change the meaning of
	rs6000_long_double_size so that 126..128 selects an appropriate
	128-bit floating point type.
	(LONG_DOUBLE_TYPE_SIZE): Update comment.
	* config/rs6000/rs6000.md (trunciftf2): Correct the modes of the
	source and destination to match the standard usage.
	(truncifkf2): Likewise.
	(copysign<mode>3, IEEE iterator): Rework copysign of float128 on
	ISA 2.07 to use an explicit clobber, instead of passing in a
	temporary.
	(copysign<mode>3_soft): Likewise.

[libgcc]
2018-06-18  Michael Meissner  <meissner@linux.ibm.com>

	* config/rs6000/t-float128 (FP128_CFLAGS_SW): Compile float128
	support modules with -mno-gnu-attribute.
	* config/rs6000/t-float128-hw (FP128_CFLAGS_HW): Likewise.

-- 
Michael Meissner, IBM
IBM, M/S 2506R, 550 King Street, Littleton, MA 01460-6245, USA
email: meissner@linux.ibm.com, phone: +1 (978) 899-4797

Attachment: ieee128-patch118c
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]