Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/marian-nmt/intgemm.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKenneth Heafield <github@kheafield.com>2020-11-18 18:56:25 +0300
committerKenneth Heafield <github@kheafield.com>2020-11-18 18:56:25 +0300
commite7fa20a2c9668542620143759cca7be17b7482af (patch)
tree7b9a7b4f6c1fffab7c17ee0b0314ae2edfc15a64
parent84a8a1018d8f5dc13afd0f103a0bcf3e5dd1dec0 (diff)
Emscripten CPUID
-rw-r--r--intgemm/intgemm.h25
1 files changed, 22 insertions, 3 deletions
diff --git a/intgemm/intgemm.h b/intgemm/intgemm.h
index b53387e..e89f9ff 100644
--- a/intgemm/intgemm.h
+++ b/intgemm/intgemm.h
@@ -163,20 +163,37 @@ template <class T> T ChooseCPU(T
#ifdef INTGEMM_COMPILER_SUPPORTS_AVX512BW
avx512bw
#endif
- , T avx2, T ssse3, T sse2, T unsupported) {
-#if defined(__INTEL_COMPILER)
+ , T
+#ifdef INTGEMM_COMPILER_SUPPORTS_AVX2
+ avx2
+#endif
+ , T ssse3, T
+#ifndef __EMSCRIPTEN__
+ sse2
+#endif
+ , T
+#ifndef __EMSCRIPTEN__
+ unsupported
+#endif
+ ) {
+#if defined(__EMSCRIPTEN__)
+ // emscripten is always ssse3.
+ return ssse3;
+#elif defined(__INTEL_COMPILER)
# ifdef INTGEMM_COMPILER_SUPPORTS_AVX512VNNI
if (_may_i_use_cpu_feature(_FEATURE_AVX512_VNNI)) return avx512vnni;
# endif
# ifdef INTGEMM_COMPILER_SUPPORTS_AVX512BW
if (_may_i_use_cpu_feature(_FEATURE_AVX512BW)) return avx512bw;
# endif
+# ifdef INTGEMM_COMPILER_SUPPORTS_AVX2
if (_may_i_use_cpu_feature(_FEATURE_AVX2)) return avx2;
+# endif
if (_may_i_use_cpu_feature(_FEATURE_SSSE3)) return ssse3;
if (_may_i_use_cpu_feature(_FEATURE_SSE2)) return sse2;
return unsupported;
#else
-// Everybody except Intel compiler.
+// Not emscripten, not Intel compiler
# if defined(_MSC_VER)
int regs[4];
int &eax = regs[0], &ebx = regs[1], &ecx = regs[2], &edx = regs[3];
@@ -208,7 +225,9 @@ template <class T> T ChooseCPU(T
# ifdef INTGEMM_COMPILER_SUPPORTS_AVX512BW
if (ebx & (1 << 30)) return avx512bw;
# endif
+# ifdef INTGEMM_COMPILER_SUPPORTS_AVX2
if (ebx & (1 << 5)) return avx2;
+# endif
}
if (m >= 1) {
# if defined(_MSC_VER)