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]

Re: [PATCH v2, #2 of 3], Add weak references to bridge old/new PowerPC ieee 128-bit name mangling


Hi Mike,

On Tue, Jun 05, 2018 at 06:47:52PM -0400, Michael Meissner wrote:
> With this fix, the compiler no longer raises an internal error if you use
> explicit overloading of __ibm128 and long double.  Instead it generates the
> expected error:
> 
> foo01.C:33:15: error: 'bool foo::iszero(long double)' cannot be overloaded with 'bool foo::iszero(long double)'
>    inline bool iszero (__ibm128 i128) { return i128 == 0.0; }
>                ^~~~~~
> foo01.C:32:15: note: previous declaration 'bool foo::iszero(long double)'
>    inline bool iszero (long double ld) { return ld == 0.0; }

Excellent.

> --- gcc/config/rs6000/rs6000.c	(revision 261175)
> +++ gcc/config/rs6000/rs6000.c	(working copy)
> @@ -16383,14 +16383,21 @@ rs6000_init_builtins (void)
>       __ieee128.  */
>    if (TARGET_FLOAT128_TYPE)
>      {
> -      ibm128_float_type_node = make_node (REAL_TYPE);
> -      TYPE_PRECISION (ibm128_float_type_node) = 128;
> -      SET_TYPE_MODE (ibm128_float_type_node, IFmode);
> -      layout_type (ibm128_float_type_node);
> +      if (TARGET_IEEEQUAD || !TARGET_LONG_DOUBLE_128)
> +	{
> +	  ibm128_float_type_node = make_node (REAL_TYPE);
> +	  TYPE_PRECISION (ibm128_float_type_node) = 128;
> +	  SET_TYPE_MODE (ibm128_float_type_node, IFmode);
> +	  layout_type (ibm128_float_type_node);
> +	}
> +      else
> +	ibm128_float_type_node = long_double_type_node;
> +
>        lang_hooks.types.register_builtin_type (ibm128_float_type_node,
>  					      "__ibm128");
>  
> -      ieee128_float_type_node = float128_type_node;
> +      ieee128_float_type_node
> +	= TARGET_IEEEQUAD ? long_double_type_node : float128_type_node;
>        lang_hooks.types.register_builtin_type (ieee128_float_type_node,
>  					      "__ieee128");
>      }

Should we use float128_type_node at all anymore, btw?

Okay for trunk, and later for 8, but please test on BE and p9.


Segher


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