[PATCH] S390: Allow "v" constraint for long double math_opt_barrier and math_force_eval with GCC 11.

Stefan Liebler stli@linux.ibm.com
Wed Mar 31 14:17:41 GMT 2021


On 31/03/2021 11:34, Florian Weimer wrote:
> * Stefan Liebler via Libc-alpha:
>> +/* Starting with gcc 11, long double values can also be processed in vector
>> +   registers if build with -march >= z14.  Then GCC defines the
>> +   __LONG_DOUBLE_VX__ macro.  */
>> +#ifdef __LONG_DOUBLE_VX__
>> +# define ASM_LONG_DOUBLE_IN_VR 1
>> +#else
>> +# define ASM_LONG_DOUBLE_IN_VR 0
>> +#endif
> 
> Above that there is:
> 
>   #ifdef HAVE_S390_VX_GCC_SUPPORT
>   # define ASM_CONSTRAINT_VR "v"
>   #else
>   # define ASM_CONSTRAINT_VR
>   #endif
> 
> I think conceptually, ASM_LONG_DOUBLE_IN_VR should be set under
> HAVE_S390_VX_GCC_SUPPORT, right?

Hi Florian,

yes, you are right. GCC will only define __LONG_DOUBLE_VX__ if it knows
about vector registers and HAVE_S390_VX_GCC_SUPPORT will always be
defined in this case.

If HAVE_S390_VX_GCC_SUPPORT would not be defined, but
__LONG_DOUBLE_VX__, then the constraint "fm" will be used in all asm
statements.

But nevertheless, setting ASM_LONG_DOUBLE_IN_VR under
HAVE_S390_VX_GCC_SUPPORT makes it more cleanly. I've just posted a v2:
https://sourceware.org/pipermail/libc-alpha/2021-March/124606.html

Thanks,
Stefan


More information about the Libc-alpha mailing list