[PATCH], Enable IBM/IEEE long double format to overriden more easily

Segher Boessenkool segher@kernel.crashing.org
Thu Oct 26 00:11:00 GMT 2017


Hi Mike,

On Sat, Oct 21, 2017 at 09:09:58AM -0400, Michael Meissner wrote:
> As Segher and I were discussing off-line, I have some problems with the current
> -mabi={ieee,ibm}longdouble switches as we start to planning to modify GCC 9 and
> GLIBC 2.27/2.28 to support __float128 as the default long double format for
> power server systems.
> 
> My gripes are:
> 
>     1)	Using Warn() in rs6000.opt means that you get two warning messages when
> 	you use the switches (one from the driver, and one from cc1).
> 
>     2)	I feel you should not get a warning if you select the option that
> 	reflects the current default behavior (i.e. -mabi=ibmlongdouble
> 	currently for power server systems).
> 
>     3)	There is no way to silenece the warning (i.e. -w doesn't work on
> 	warnings in the .opt file).  Both GLIBC and LIBGCC will need the
> 	ability to build support modules with an explicit long double format.
> 
>     4)	In the future we will need a little more flexibility in how the default
> 	is set.
> 
>     5)	There is a mis-match between the documentation and rs6000.opt, as these
> 	switches are documented, but use Undocumented in the rs6000.opt.

Agreed on all.

> These patches fix these issues.  If you use -Wno-psabi, it will silence the
> warning.  I have built these patches on a little endian power8 system, and
> there were no regressions.  Can I check these patches into the trunk?
> 
> 2017-10-21  Michael Meissner  <meissner@linux.vnet.ibm.com>
> 
> 	* config/rs6000/aix.h (TARGET_IEEEQUAD_DEFAULT): Set long double
> 	default to IBM.
> 	* config/rs6000/darwin.h (TARGET_IEEEQUAD_DEFAULT): Likewise.
> 	* config/rs6000/rs6000.opt (-mabi=ieeelongdouble): Move the
> 	warning to rs6000.c.  Remove the Undocumented flag, since it has
> 	been documented.
> 	(-mabi=ibmlongdouble): Likewise.

And more importantly, we _want_ it to be documented (right)?

> --- gcc/config/rs6000/rs6000.opt	(revision 253961)
> +++ gcc/config/rs6000/rs6000.opt	(working copy)
> @@ -381,10 +381,10 @@ mabi=d32
>  Target RejectNegative Undocumented Warn(using old darwin ABI) Var(rs6000_darwin64_abi, 0)
>  
>  mabi=ieeelongdouble
> -Target RejectNegative Undocumented Warn(using IEEE extended precision long double) Var(rs6000_ieeequad) Save
> +Target RejectNegative Var(rs6000_ieeequad) Save
>  
>  mabi=ibmlongdouble
> -Target RejectNegative Undocumented Warn(using IBM extended precision long double) Var(rs6000_ieeequad, 0)
> +Target RejectNegative Var(rs6000_ieeequad, 0)

Does this need "Save" as well?

> +      if (!warned_change_long_double && warn_psabi)
> +	{
> +	  warned_change_long_double = true;
> +	  if (TARGET_IEEEQUAD)
> +	    warning (0, "Using IEEE extended precision long double");
> +	  else
> +	    warning (0, "Using IBM extended precision long double");
> +	}

You can put OPT_Wpsabi in place of that 0, it's what that arg is for :-)

Okay with that changed.  Thanks!


Segher



More information about the Gcc-patches mailing list