This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH] i686: Add missing IS_IN (libc) guards to vectorized strcspn
- From: Carlos O'Donell <carlos at redhat dot com>
- To: Florian Weimer <fweimer at redhat dot com>, libc-alpha at sourceware dot org
- Date: Wed, 14 Jun 2017 08:32:45 -0400
- Subject: Re: [PATCH] i686: Add missing IS_IN (libc) guards to vectorized strcspn
- Authentication-results: sourceware.org; auth=none
- References: <20170614061950.400FE4010728F@oldenburg.str.redhat.com>
On 06/14/2017 02:19 AM, Florian Weimer wrote:
> Since commit d957c4d3fa48d685ff2726c605c988127ef99395 (i386: Compile
> rtld-*.os with -mno-sse -mno-mmx -mfpmath=387), vector intrinsics can
> no longer be used in ld.so, even if the compiled code never makes it
> into the final ld.so link. This commit adds the missing IS_IN (libc)
> guard to the SSE 4.2 strcspn implementation, so that it can be used from
> ld.so in the future.
>
> 2017-06-14 Florian Weimer <fweimer@redhat.com>
>
> * sysdeps/i386/i686/multiarch/strcspn-c.c: Add IS_IN (libc) guard.
> * sysdeps/i386/i686/multiarch/varshift.c: Likewise.
This looks good to me.
We have struggled with these issues for years. I wish there was a more
automatic way to enable new functions for use in ld.so, but there isn't.
Out of curiosity, if you don't apply this patch, and use strcspn, does
the tst-ld-sse-use.sh test fail?
> diff --git a/sysdeps/i386/i686/multiarch/strcspn-c.c b/sysdeps/i386/i686/multiarch/strcspn-c.c
> index 6d61e19..ec230fb 100644
> --- a/sysdeps/i386/i686/multiarch/strcspn-c.c
> +++ b/sysdeps/i386/i686/multiarch/strcspn-c.c
> @@ -1,2 +1,4 @@
> -#define __strcspn_sse2 __strcspn_ia32
> -#include <sysdeps/x86_64/multiarch/strcspn-c.c>
> +#if IS_IN (libc)
> +# define __strcspn_sse2 __strcspn_ia32
> +# include <sysdeps/x86_64/multiarch/strcspn-c.c>
> +#endif
> diff --git a/sysdeps/i386/i686/multiarch/varshift.c b/sysdeps/i386/i686/multiarch/varshift.c
> index 7760b96..6742a35 100644
> --- a/sysdeps/i386/i686/multiarch/varshift.c
> +++ b/sysdeps/i386/i686/multiarch/varshift.c
> @@ -1 +1,3 @@
> -#include <sysdeps/x86_64/multiarch/varshift.c>
> +#if IS_IN (libc)
> +# include <sysdeps/x86_64/multiarch/varshift.c>
> +#endif
>