summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--numpy/core/setup.py6
-rw-r--r--numpy/core/src/common/npy_cpu_features.c (renamed from numpy/core/src/common/npy_cpu_features.c.src)78
2 files changed, 64 insertions, 20 deletions
diff --git a/numpy/core/setup.py b/numpy/core/setup.py
index 6454e641c..dd60a00db 100644
--- a/numpy/core/setup.py
+++ b/numpy/core/setup.py
@@ -858,7 +858,7 @@ def configuration(parent_package='',top_path=None):
join('src', 'common', 'ucsnarrow.c'),
join('src', 'common', 'ufunc_override.c'),
join('src', 'common', 'numpyos.c'),
- join('src', 'common', 'npy_cpu_features.c.src'),
+ join('src', 'common', 'npy_cpu_features.c'),
]
if os.environ.get('NPY_USE_BLAS_ILP64', "0") != "0":
@@ -1142,7 +1142,7 @@ def configuration(parent_package='',top_path=None):
config.add_extension('_umath_tests', sources=[
join('src', 'umath', '_umath_tests.c.src'),
join('src', 'umath', '_umath_tests.dispatch.c'),
- join('src', 'common', 'npy_cpu_features.c.src'),
+ join('src', 'common', 'npy_cpu_features.c'),
])
#######################################################################
@@ -1172,7 +1172,7 @@ def configuration(parent_package='',top_path=None):
#######################################################################
config.add_extension('_simd', sources=[
- join('src', 'common', 'npy_cpu_features.c.src'),
+ join('src', 'common', 'npy_cpu_features.c'),
join('src', '_simd', '_simd.c'),
join('src', '_simd', '_simd_inc.h.src'),
join('src', '_simd', '_simd_data.inc.src'),
diff --git a/numpy/core/src/common/npy_cpu_features.c.src b/numpy/core/src/common/npy_cpu_features.c
index 602eda57a..773f4af86 100644
--- a/numpy/core/src/common/npy_cpu_features.c.src
+++ b/numpy/core/src/common/npy_cpu_features.c
@@ -49,28 +49,72 @@ npy_cpu_init(void)
return 0;
}
+static struct {
+ enum npy_cpu_features feature;
+ char const *string;
+} features[] = {{NPY_CPU_FEATURE_MMX, "MMX"},
+ {NPY_CPU_FEATURE_SSE, "SSE"},
+ {NPY_CPU_FEATURE_SSE2, "SSE2"},
+ {NPY_CPU_FEATURE_SSE3, "SSE3"},
+ {NPY_CPU_FEATURE_SSSE3, "SSSE3"},
+ {NPY_CPU_FEATURE_SSE41, "SSE41"},
+ {NPY_CPU_FEATURE_POPCNT, "POPCNT"},
+ {NPY_CPU_FEATURE_SSE42, "SSE42"},
+ {NPY_CPU_FEATURE_AVX, "AVX"},
+ {NPY_CPU_FEATURE_F16C, "F16C"},
+ {NPY_CPU_FEATURE_XOP, "XOP"},
+ {NPY_CPU_FEATURE_FMA4, "FMA4"},
+ {NPY_CPU_FEATURE_FMA3, "FMA3"},
+ {NPY_CPU_FEATURE_AVX2, "AVX2"},
+ {NPY_CPU_FEATURE_AVX512F, "AVX512F"},
+ {NPY_CPU_FEATURE_AVX512CD, "AVX512CD"},
+ {NPY_CPU_FEATURE_AVX512ER, "AVX512ER"},
+ {NPY_CPU_FEATURE_AVX512PF, "AVX512PF"},
+ {NPY_CPU_FEATURE_AVX5124FMAPS, "AVX5124FMAPS"},
+ {NPY_CPU_FEATURE_AVX5124VNNIW, "AVX5124VNNIW"},
+ {NPY_CPU_FEATURE_AVX512VPOPCNTDQ, "AVX512VPOPCNTDQ"},
+ {NPY_CPU_FEATURE_AVX512VL, "AVX512VL"},
+ {NPY_CPU_FEATURE_AVX512BW, "AVX512BW"},
+ {NPY_CPU_FEATURE_AVX512DQ, "AVX512DQ"},
+ {NPY_CPU_FEATURE_AVX512VNNI, "AVX512VNNI"},
+ {NPY_CPU_FEATURE_AVX512IFMA, "AVX512IFMA"},
+ {NPY_CPU_FEATURE_AVX512VBMI, "AVX512VBMI"},
+ {NPY_CPU_FEATURE_AVX512VBMI2, "AVX512VBMI2"},
+ {NPY_CPU_FEATURE_AVX512BITALG, "AVX512BITALG"},
+ {NPY_CPU_FEATURE_AVX512_KNL, "AVX512_KNL"},
+ {NPY_CPU_FEATURE_AVX512_KNM, "AVX512_KNM"},
+ {NPY_CPU_FEATURE_AVX512_SKX, "AVX512_SKX"},
+ {NPY_CPU_FEATURE_AVX512_CLX, "AVX512_CLX"},
+ {NPY_CPU_FEATURE_AVX512_CNL, "AVX512_CNL"},
+ {NPY_CPU_FEATURE_AVX512_ICL, "AVX512_ICL"},
+ {NPY_CPU_FEATURE_VSX, "VSX"},
+ {NPY_CPU_FEATURE_VSX2, "VSX2"},
+ {NPY_CPU_FEATURE_VSX3, "VSX3"},
+ {NPY_CPU_FEATURE_VSX4, "VSX4"},
+ {NPY_CPU_FEATURE_VX, "VX"},
+ {NPY_CPU_FEATURE_VXE, "VXE"},
+ {NPY_CPU_FEATURE_VXE2, "VXE2"},
+ {NPY_CPU_FEATURE_NEON, "NEON"},
+ {NPY_CPU_FEATURE_NEON_FP16, "NEON_FP16"},
+ {NPY_CPU_FEATURE_NEON_VFPV4, "NEON_VFPV4"},
+ {NPY_CPU_FEATURE_ASIMD, "ASIMD"},
+ {NPY_CPU_FEATURE_FPHP, "FPHP"},
+ {NPY_CPU_FEATURE_ASIMDHP, "ASIMDHP"},
+ {NPY_CPU_FEATURE_ASIMDDP, "ASIMDDP"},
+ {NPY_CPU_FEATURE_ASIMDFHM, "ASIMDFHM"}};
+
+
NPY_VISIBILITY_HIDDEN PyObject *
npy_cpu_features_dict(void)
{
PyObject *dict = PyDict_New();
if (dict) {
- /**begin repeat
- * #feature = MMX, SSE, SSE2, SSE3, SSSE3, SSE41, POPCNT, SSE42,
- * AVX, F16C, XOP, FMA4, FMA3, AVX2, AVX512F,
- * AVX512CD, AVX512ER, AVX512PF, AVX5124FMAPS, AVX5124VNNIW,
- * AVX512VPOPCNTDQ, AVX512VL, AVX512BW, AVX512DQ, AVX512VNNI,
- * AVX512IFMA, AVX512VBMI, AVX512VBMI2, AVX512BITALG,
- * AVX512_KNL, AVX512_KNM, AVX512_SKX, AVX512_CLX, AVX512_CNL, AVX512_ICL,
- * VSX, VSX2, VSX3, VSX4,
- * VX, VXE, VXE2,
- * NEON, NEON_FP16, NEON_VFPV4, ASIMD, FPHP, ASIMDHP, ASIMDDP, ASIMDFHM#
- */
- if (PyDict_SetItemString(dict, "@feature@",
- npy__cpu_have[NPY_CPU_FEATURE_@feature@] ? Py_True : Py_False) < 0) {
- Py_DECREF(dict);
- return NULL;
- }
- /**end repeat**/
+ for(unsigned i = 0; i < sizeof(features)/sizeof(features[0]); ++i)
+ if (PyDict_SetItemString(dict, features[i].string,
+ npy__cpu_have[features[i].feature] ? Py_True : Py_False) < 0) {
+ Py_DECREF(dict);
+ return NULL;
+ }
}
return dict;
}