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, #3 of 3], Add weak references to bridge old/new PowerPC ieee 128-bit name mangling


On Tue, Jun 05, 2018 at 07:11:41PM -0400, Michael Meissner wrote:
> This patch makes the long double pack/unpack built-in functions only available
> if the long double format is IBM extended double.
> 
> I added new pack and unpack functions that use __ibm128 instead of long double
> in case somebody needs to build IBM extended double after we have changed the
> default to IEEE 128-bit.

> @@ -15339,10 +15340,9 @@ rs6000_invalid_builtin (enum rs6000_buil
>    else if ((fnmask & RS6000_BTM_P9_MISC) == RS6000_BTM_P9_MISC)
>      error ("builtin function %qs requires the %qs option", name,
>  	   "-mcpu=power9");
> -  else if ((fnmask & (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
> -	   == (RS6000_BTM_HARD_FLOAT | RS6000_BTM_LDBL128))
> -    error ("builtin function %qs requires the %qs and %qs options",
> -	   name, "-mhard-float", "-mlong-double-128");
> +  else if ((fnmask & RS6000_BTM_LDBL128) == RS6000_BTM_LDBL128)
> +    error ("builtin function %qs requires the %qs option", name,
> +	   TARGET_IEEEQUAD ? "-mabi=ibmlongdouble" : "-mlong-double-128");

This no longer tests for hard float.  Is that correct, i.e. is hard
float always enabled if we get here?

> +      /* For the pack and unpack int128 routines, fix up the builtin so it
> +	 uses the correct IBM128 type.  */
> +    case MISC_BUILTIN_PACK_IF:
> +      if (TARGET_LONG_DOUBLE_128 && !TARGET_IEEEQUAD)
> +	{
> +	  icode = CODE_FOR_packtf;
> +	  fcode = MISC_BUILTIN_PACK_TF;
> +	  uns_fcode = (size_t)fcode;
> +	}
> +      break;
> +
> +    case MISC_BUILTIN_UNPACK_IF:
> +      if (TARGET_LONG_DOUBLE_128 && !TARGET_IEEEQUAD)
> +	{
> +	  icode = CODE_FOR_unpacktf;
> +	  fcode = MISC_BUILTIN_UNPACK_TF;
> +	  uns_fcode = (size_t)fcode;
> +	}
> +      break;

(Space after cast, but nothing here does that I see).

Is this correct?  Why should it not use the IFmode version?

> +is returned.  The @code{__builtin_unpack_longdouble} function is only
> +availble if @code{long double} uses the IBM extended double
> +representation.

Typo ("available").

> +The @code{__builtin_pack_longdouble} function takes two @code{double}
> +arguments and returns a @code{long double} value that combines the two
> +arguments.  The @code{__builtin_pack_longdouble} function is only
> +availble if @code{long double} uses the IBM extended double
> +representation.

And here.

Okay for trunk (and backports) if those are not mistakes or you fix them,
and maybe add some comment.

Thanks,


Segher


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