old versions of GCC (e.g. 5.4) cannot detect support for aes,pclmul
diff --git a/lib/fusion.c b/lib/fusion.c
index d1f074a..c121bee 100644
--- a/lib/fusion.c
+++ b/lib/fusion.c
@@ -40,6 +40,7 @@
 #include <stdint.h>
 #include <stdlib.h>
 #include <string.h>
+#include <immintrin.h>
 #include <tmmintrin.h>
 #include <nmmintrin.h>
 #include <wmmintrin.h>
@@ -849,14 +850,30 @@
                                                sizeof(struct aesgcm_context),
                                                aes128gcm_setup};
 
+#include <cpuid.h>
+
 int ptls_fusion_is_supported_by_cpu(void)
 {
-#define REQUIRE(s)                                                                                                                 \
-    if (!__builtin_cpu_supports(s))                                                                                                \
+    unsigned leaf1_ecx, leaf7_ebx;
+
+    { /* GCC-specific code to obtain CPU features */
+        unsigned unused1, unused2, unused3;
+        if (!__get_cpuid(1, &unused1, &unused2, &leaf1_ecx, &unused3))
+            return 0;
+        if (!__get_cpuid_count(7, 0, &unused1, &leaf7_ebx, &unused2, &unused3))
+            return 0;
+    }
+
+
+    /* AVX2 */
+    if ((leaf7_ebx & (1 << 5)) == 0)
         return 0;
-    REQUIRE("avx2");
-    REQUIRE("aes");
-    REQUIRE("pclmul");
-#undef REQUIRE
+    /* AES */
+    if ((leaf1_ecx & (1 << 25)) == 0)
+        return 0;
+    /* PCLMUL */
+    if ((leaf1_ecx & (1 << 1)) == 0)
+        return 0;
+
     return 1;
 }