summaryrefslogtreecommitdiff
path: root/devel/electron6/files/patch-third__party_zlib_arm__features.c
diff options
context:
space:
mode:
Diffstat (limited to 'devel/electron6/files/patch-third__party_zlib_arm__features.c')
-rw-r--r--devel/electron6/files/patch-third__party_zlib_arm__features.c46
1 files changed, 46 insertions, 0 deletions
diff --git a/devel/electron6/files/patch-third__party_zlib_arm__features.c b/devel/electron6/files/patch-third__party_zlib_arm__features.c
new file mode 100644
index 000000000000..c7ff3cd5f2a0
--- /dev/null
+++ b/devel/electron6/files/patch-third__party_zlib_arm__features.c
@@ -0,0 +1,46 @@
+--- third_party/zlib/arm_features.c.orig 2019-09-10 10:43:21 UTC
++++ third_party/zlib/arm_features.c
+@@ -16,6 +16,10 @@ int ZLIB_INTERNAL arm_cpu_enable_pmull = 0;
+ #include <pthread.h>
+ #endif
+
++#if defined(__FreeBSD__)
++#include <machine/armreg.h>
++#include <sys/types.h>
++#else
+ #if defined(ARMV8_OS_ANDROID)
+ #include <cpu-features.h>
+ #elif defined(ARMV8_OS_LINUX)
+@@ -30,6 +34,7 @@ int ZLIB_INTERNAL arm_cpu_enable_pmull = 0;
+ #else
+ #error arm_features.c ARM feature detection in not defined for your platform
+ #endif
++#endif
+
+ static void _arm_check_features(void);
+
+@@ -68,14 +73,24 @@ static void _arm_check_features(void)
+ arm_cpu_enable_crc32 = !!(features & ANDROID_CPU_ARM_FEATURE_CRC32);
+ arm_cpu_enable_pmull = !!(features & ANDROID_CPU_ARM_FEATURE_PMULL);
+ #elif defined(ARMV8_OS_LINUX) && defined(__aarch64__)
++#if defined(__FreeBSD__)
++ uint64_t id_aa64isar0 = READ_SPECIALREG(ID_AA64ISAR0_EL1);
++ if (ID_AA64ISAR0_AES(id_aa64isar0) == ID_AA64ISAR0_AES_PMULL)
++ arm_cpu_enable_pmull = 1;
++ if (ID_AA64ISAR0_CRC32(id_aa64isar0) == ID_AA64ISAR0_CRC32_BASE)
++ arm_cpu_enable_crc32 = 1;
++#else
+ unsigned long features = getauxval(AT_HWCAP);
+ arm_cpu_enable_crc32 = !!(features & HWCAP_CRC32);
+ arm_cpu_enable_pmull = !!(features & HWCAP_PMULL);
++#endif
+ #elif defined(ARMV8_OS_LINUX) && (defined(__ARM_NEON) || defined(__ARM_NEON__))
++#if !defined(__FreeBSD__)
+ /* Query HWCAP2 for ARMV8-A SoCs running in aarch32 mode */
+ unsigned long features = getauxval(AT_HWCAP2);
+ arm_cpu_enable_crc32 = !!(features & HWCAP2_CRC32);
+ arm_cpu_enable_pmull = !!(features & HWCAP2_PMULL);
++#endif
+ #elif defined(ARMV8_OS_FUCHSIA)
+ uint32_t features;
+ zx_status_t rc = zx_system_get_features(ZX_FEATURE_KIND_CPU, &features);