avx512f: work around ICC generating AVX-512F instructions improperly
If you use __m512/__m512i/__m512d ICC will generate AVX-512F
instructions even if you haven't targeted AVX-512F.  This just
prevents us from using the types in ICC unless AVX-512F is
enabled.
@@ -260,8 +260,11 @@ typedef union {
* all compilers I've looked at use an object-like macro for
* _MM_CMPINT_GE, which is defined to _MM_CMPINT_NLT. _MM_CMPINT_NLT
* is included in case a compiler does the reverse, though I haven't
- * run into one which does. */
-#if defined(_MM_CMPINT_GE) || defined(_MM_CMPINT_NLT)
+ * run into one which does.
+ *
+ * As for the ICC check, unlike other compilers, merely using the
+ * AVX-512 types causes ICC to generate AVX-512 instructions. */
+#if (defined(_MM_CMPINT_GE) || defined(_MM_CMPINT_NLT)) && (defined(SIMDE_X86_AVX512F_NATIVE) || !defined(HEDLEY_INTEL_VERSION))
typedef __m512 simde__m512;
typedef __m512i simde__m512i;
typedef __m512d simde__m512d;
