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 >