On Tue, Jul 30, 2024 at 12:18 PM Richard Biener <rguent...@suse.de> wrote:
>
> The following implements the hook, excluding x87 modes for scalar
> and complex float modes.
>
> Bootstrapped and tested on x86_64-unknown-linux-gnu.
>
> OK?
>
> Thanks,
> Richard.
>
>         * i386.cc (TARGET_MODE_CAN_TRANSFER_BITS): Define.
>         (ix86_mode_can_transfer_bits): New function.
> ---
>  gcc/config/i386/i386.cc | 21 +++++++++++++++++++++
>  1 file changed, 21 insertions(+)
>
> diff --git a/gcc/config/i386/i386.cc b/gcc/config/i386/i386.cc
> index 12d15feb5e9..5184366916b 100644
> --- a/gcc/config/i386/i386.cc
> +++ b/gcc/config/i386/i386.cc
> @@ -26113,6 +26113,24 @@ ix86_have_ccmp ()
>    return (bool) TARGET_APX_CCMP;
>  }
>
> +/* Implement TARGET_MODE_CAN_TRANSFER_BITS.  */
> +static bool
> +ix86_mode_can_transfer_bits (machine_mode mode)
> +{
> +  if (GET_MODE_CLASS (mode) == MODE_FLOAT
> +      || GET_MODE_CLASS (mode) == MODE_COMPLEX_FLOAT)
> +    switch (GET_MODE_INNER (mode))
> +      {
> +      case SFmode:
> +      case DFmode:
> +       return TARGET_SSE_MATH && !TARGET_MIX_SSE_I387;

This can be simplified to:

return !(ix86_fpmath & FPMATH_387);

(Which implies that we should introduce TARGET_I387_MATH to parallel
TARGET_SSE_MATH some day...)

> +      default:
> +       return false;

We don't want to enable HFmode for transfers?

Uros.

> +      }
> +
> +  return true;
> +}
> +
>  /* Target-specific selftests.  */
>
>  #if CHECKING_P
> @@ -26959,6 +26977,9 @@ ix86_libgcc_floating_mode_supported_p
>  #undef TARGET_HAVE_CCMP
>  #define TARGET_HAVE_CCMP ix86_have_ccmp
>
> +#undef TARGET_MODE_CAN_TRANSFER_BITS
> +#define TARGET_MODE_CAN_TRANSFER_BITS ix86_mode_can_transfer_bits
> +
>  static bool
>  ix86_libc_has_fast_function (int fcode ATTRIBUTE_UNUSED)
>  {
> --
> 2.43.0
>

Reply via email to