diff options
| author | Rafael Cardoso Fernandes Sousa <rafaelcfsousa@ibm.com> | 2022-01-07 10:48:36 -0600 |
|---|---|---|
| committer | Rafael Cardoso Fernandes Sousa <rafaelcfsousa@ibm.com> | 2022-01-13 14:47:51 -0600 |
| commit | d88104fd0e2f85ac4eb667fcd7161aaa1d41e11a (patch) | |
| tree | dfcfeafda07a79d06d75bbaa104ebb7e2d51ced0 /numpy/distutils/checks | |
| parent | 7191d9a4773d77205349ac151f84b72c0ffcf848 (diff) | |
| download | numpy-d88104fd0e2f85ac4eb667fcd7161aaa1d41e11a.tar.gz | |
ENH: Add CPU feature detection for VSX4 (Power10)
Diffstat (limited to 'numpy/distutils/checks')
| -rw-r--r-- | numpy/distutils/checks/cpu_vsx4.c | 14 | ||||
| -rw-r--r-- | numpy/distutils/checks/extra_vsx4_mma.c | 21 |
2 files changed, 35 insertions, 0 deletions
diff --git a/numpy/distutils/checks/cpu_vsx4.c b/numpy/distutils/checks/cpu_vsx4.c new file mode 100644 index 000000000..a6acc7384 --- /dev/null +++ b/numpy/distutils/checks/cpu_vsx4.c @@ -0,0 +1,14 @@ +#ifndef __VSX__ + #error "VSX is not supported" +#endif +#include <altivec.h> + +typedef __vector unsigned int v_uint32x4; + +int main(void) +{ + v_uint32x4 v1 = (v_uint32x4){2, 4, 8, 16}; + v_uint32x4 v2 = (v_uint32x4){2, 2, 2, 2}; + v_uint32x4 v3 = vec_mod(v1, v2); + return (int)vec_extractm(v3); +} diff --git a/numpy/distutils/checks/extra_vsx4_mma.c b/numpy/distutils/checks/extra_vsx4_mma.c new file mode 100644 index 000000000..a70b2a9f6 --- /dev/null +++ b/numpy/distutils/checks/extra_vsx4_mma.c @@ -0,0 +1,21 @@ +#ifndef __VSX__ + #error "VSX is not supported" +#endif +#include <altivec.h> + +typedef __vector float fv4sf_t; +typedef __vector unsigned char vec_t; + +int main(void) +{ + __vector_quad acc0; + float a[4] = {0,1,2,3}; + float b[4] = {0,1,2,3}; + vec_t *va = (vec_t *) a; + vec_t *vb = (vec_t *) b; + __builtin_mma_xvf32ger(&acc0, va[0], vb[0]); + fv4sf_t result[4]; + __builtin_mma_disassemble_acc((void *)result, &acc0); + fv4sf_t c0 = result[0]; + return (int)((float*)&c0)[0]; +} |
