powerpc: Expose VSX feature test

Message ID klDQRjHsGNLyUfoTY_7IVfFKRRAhSEeHVIYr89lVsb-ufm0FM5_KS2Wok7jCSBaVZXDYTJFmlGNMT7uJxbt0dIyn3m2SLuzdyWsoALd0pi4=@protonmail.com
State New
Headers show
Series
  • powerpc: Expose VSX feature test
Related show

Commit Message

Nathan Phillips March 28, 2018, 8:19 a.m.
Hope it's OK to submit a small change like this. Trying to familiarize myself
with the patch process.

My copyright assignment is underway.

--

Read the HWCAP auxval key to test for VSX support. Expose result through
the cpu_features interface.

Preliminary change to prepare for PowerPC optimized libmvec implementations
[BZ #20123]. Enables selecting optimized version at load time in ifunc
resolver.

	* sysdeps/powerpc/cpu-features.h (cpu_features): Add vsx field.
	* sysdeps/powerpc/cpu-features.c (init_cpu_features):
	Feature test VSX availability.
---

Comments

Tulio Magno Quites Machado Filho March 28, 2018, 12:16 p.m. | #1
Nathan Phillips <waic9e@protonmail.com> writes:

> Hope it's OK to submit a small change like this. Trying to familiarize myself
> with the patch process.
>
> My copyright assignment is underway.

Ack.

> Read the HWCAP auxval key to test for VSX support. Expose result through

Please use 2 spaces here ---------------------------^

> the cpu_features interface.
>
> Preliminary change to prepare for PowerPC optimized libmvec implementations
> [BZ #20123]. Enables selecting optimized version at load time in ifunc

Likewise. ----^

> resolver.

Can't you take it directly from the hwcap variable that is already available
when using libc_ifunc or libc_ifunc_redirected?  e.g.
sysdeps/powerpc/powerpc64/multiarch/memcmp.c
Adhemerval Zanella March 28, 2018, 12:42 p.m. | #2
On 28/03/2018 09:16, Tulio Magno Quites Machado Filho wrote:
> Nathan Phillips <waic9e@protonmail.com> writes:
> 
>> Hope it's OK to submit a small change like this. Trying to familiarize myself
>> with the patch process.
>>
>> My copyright assignment is underway.
> 
> Ack.
> 
>> Read the HWCAP auxval key to test for VSX support. Expose result through
> 
> Please use 2 spaces here ---------------------------^
> 
>> the cpu_features interface.
>>
>> Preliminary change to prepare for PowerPC optimized libmvec implementations
>> [BZ #20123]. Enables selecting optimized version at load time in ifunc
> 
> Likewise. ----^
> 
>> resolver.
> 
> Can't you take it directly from the hwcap variable that is already available
> when using libc_ifunc or libc_ifunc_redirected?  e.g.
> sysdeps/powerpc/powerpc64/multiarch/memcmp.c
> 
> 

I don't have the original message in my mailbox, was it sent only privately?
If it was the case, could you send the original one as well?
Tulio Magno Quites Machado Filho March 28, 2018, 1:31 p.m. | #3
Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:

> On 28/03/2018 09:16, Tulio Magno Quites Machado Filho wrote:
>> Nathan Phillips <waic9e@protonmail.com> writes:
>> 
>>> Hope it's OK to submit a small change like this. Trying to familiarize myself
>>> with the patch process.
>>>
>>> My copyright assignment is underway.
>> 
>> Ack.
>> 
>>> Read the HWCAP auxval key to test for VSX support. Expose result through
>> 
>> Please use 2 spaces here ---------------------------^
>> 
>>> the cpu_features interface.
>>>
>>> Preliminary change to prepare for PowerPC optimized libmvec implementations
>>> [BZ #20123]. Enables selecting optimized version at load time in ifunc
>> 
>> Likewise. ----^
>> 
>>> resolver.
>> 
>> Can't you take it directly from the hwcap variable that is already available
>> when using libc_ifunc or libc_ifunc_redirected?  e.g.
>> sysdeps/powerpc/powerpc64/multiarch/memcmp.c
>> 
>> 
>
> I don't have the original message in my mailbox, was it sent only privately?

No, it's in the mailing list archives:
https://sourceware.org/ml/libc-alpha/2018-03/msg00582.html

> If it was the case, could you send the original one as well?

Sure!  I'm sending it in private to avoid duplicating this in the mailing list.
Adhemerval Zanella March 28, 2018, 1:36 p.m. | #4
On 28/03/2018 10:31, Tulio Magno Quites Machado Filho wrote:
> Adhemerval Zanella <adhemerval.zanella@linaro.org> writes:
> 
>> On 28/03/2018 09:16, Tulio Magno Quites Machado Filho wrote:
>>> Nathan Phillips <waic9e@protonmail.com> writes:
>>>
>>>> Hope it's OK to submit a small change like this. Trying to familiarize myself
>>>> with the patch process.
>>>>
>>>> My copyright assignment is underway.
>>>
>>> Ack.
>>>
>>>> Read the HWCAP auxval key to test for VSX support. Expose result through
>>>
>>> Please use 2 spaces here ---------------------------^
>>>
>>>> the cpu_features interface.
>>>>
>>>> Preliminary change to prepare for PowerPC optimized libmvec implementations
>>>> [BZ #20123]. Enables selecting optimized version at load time in ifunc
>>>
>>> Likewise. ----^
>>>
>>>> resolver.
>>>
>>> Can't you take it directly from the hwcap variable that is already available
>>> when using libc_ifunc or libc_ifunc_redirected?  e.g.
>>> sysdeps/powerpc/powerpc64/multiarch/memcmp.c
>>>
>>>
>>
>> I don't have the original message in my mailbox, was it sent only privately?
> 
> No, it's in the mailing list archives:
> https://sourceware.org/ml/libc-alpha/2018-03/msg00582.html
> 
>> If it was the case, could you send the original one as well?
> 
> Sure!  I'm sending it in private to avoid duplicating this in the mailing list.
> 

Right, thanks for the link, I missed this one.
Nathan Phillips March 28, 2018, 1:45 p.m. | #5
Thank you for reviewing. Well noted about the double spaces.


On March 28, 2018 6:16 AM, Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com> wrote:

> Can't you take it directly from the hwcap variable that is already available
> when using libc_ifunc or libc_ifunc_redirected? e.g.
> sysdeps/powerpc/powerpc64/multiarch/memcmp.c

I hadn't seen that, and it makes sense.

The x86 version seems to store everything in cpu_features, then
use that to resolve the ifunc. But I see the pattern is different
in the PPC section.

I propose dropping this patch and I can follow the PPC pattern instead.

Patch

diff --git a/sysdeps/powerpc/cpu-features.c b/sysdeps/powerpc/cpu-features.c
index 955d4778a6..477c7504b9 100644
--- a/sysdeps/powerpc/cpu-features.c
+++ b/sysdeps/powerpc/cpu-features.c
@@ -16,6 +16,8 @@ 
    License along with the GNU C Library; if not, see
    <http://www.gnu.org/licenses/>.  */
 
+#include <errno.h>
+#include <sys/auxv.h>
 #include <stdint.h>
 #include <cpu-features.h>
 
@@ -26,6 +28,9 @@ 
 static inline void
 init_cpu_features (struct cpu_features *cpu_features)
 {
+  errno = 0;
+  unsigned long int hwcap = getauxval (AT_HWCAP);
+
   /* Default is to use aligned memory access on optimized function unless
      tunables is enable, since for this case user can explicit disable
      unaligned optimizations.  */
@@ -36,4 +41,13 @@  init_cpu_features (struct cpu_features *cpu_features)
 #else
   cpu_features->use_cached_memopt = false;
 #endif
+
+  if (errno == ENOENT)
+    {
+      cpu_features->vsx = false;
+    }
+  else
+    {
+      cpu_features->vsx = ((hwcap & PPC_FEATURE_HAS_VSX) != 0);
+    }
 }
diff --git a/sysdeps/powerpc/cpu-features.h b/sysdeps/powerpc/cpu-features.h
index e596385b4b..0248862b8a 100644
--- a/sysdeps/powerpc/cpu-features.h
+++ b/sysdeps/powerpc/cpu-features.h
@@ -23,6 +23,7 @@ 
 struct cpu_features
 {
   bool use_cached_memopt;
+  bool vsx;
 };
 
 #endif /* __CPU_FEATURES_H  */