aboutsummaryrefslogtreecommitdiff
path: root/databases/mysql84-server/files/patch-storage_innobase_ut_crc32.cc
diff options
context:
space:
mode:
Diffstat (limited to 'databases/mysql84-server/files/patch-storage_innobase_ut_crc32.cc')
-rw-r--r--databases/mysql84-server/files/patch-storage_innobase_ut_crc32.cc104
1 files changed, 104 insertions, 0 deletions
diff --git a/databases/mysql84-server/files/patch-storage_innobase_ut_crc32.cc b/databases/mysql84-server/files/patch-storage_innobase_ut_crc32.cc
new file mode 100644
index 000000000000..af15dd2ee114
--- /dev/null
+++ b/databases/mysql84-server/files/patch-storage_innobase_ut_crc32.cc
@@ -0,0 +1,104 @@
+--- storage/innobase/ut/crc32.cc.orig 2024-04-10 06:26:28 UTC
++++ storage/innobase/ut/crc32.cc
+@@ -333,8 +333,25 @@ bool can_use_poly_mul() { return true; }
+ #endif /* CRC32_ARM64_APPLE */
+
+ #ifdef CRC32_ARM64_DEFAULT
++#ifdef __FreeBSD__
++bool can_use_crc32() {
++ unsigned long capabilities;
++
++ if (elf_aux_info(AT_HWCAP, &capabilities, sizeof(unsigned long)))
++ return false;
++ return capabilities & HWCAP_CRC32;
++}
++bool can_use_poly_mul() {
++ unsigned long capabilities;
++
++ if (elf_aux_info(AT_HWCAP, &capabilities, sizeof(unsigned long)))
++ return false;
++ return capabilities & HWCAP_CRC32;
++}
++#else
+ bool can_use_crc32() { return getauxval(AT_HWCAP) & HWCAP_CRC32; }
+ bool can_use_poly_mul() { return getauxval(AT_HWCAP) & HWCAP_PMULL; }
++#endif
+ #endif /* CRC32_ARM64_DEFAULT */
+
+ /** A helper template to statically unroll a loop with a fixed number of
+@@ -443,25 +460,39 @@ uint64_t crc32_impl::update(uint64_t crc, uint64_t dat
+
+ #ifdef CRC32_ARM64
+ #ifdef CRC32_ARM64_DEFAULT
++#ifndef __clang__
+ MY_ATTRIBUTE((target("+crc")))
++#else
++MY_ATTRIBUTE((target("crc")))
++#endif
+ #endif /* CRC32_ARM64_DEFAULT */
+ uint32_t crc32_impl::update(uint32_t crc, unsigned char data) {
+ return __crc32cb(crc, data);
+ }
+ #ifdef CRC32_ARM64_DEFAULT
++#ifndef __clang__
+ MY_ATTRIBUTE((target("+crc")))
++#endif
+ #endif /* CRC32_ARM64_DEFAULT */
+ uint32_t crc32_impl::update(uint32_t crc, uint16_t data) {
+ return __crc32ch(crc, data);
+ }
+ #ifdef CRC32_ARM64_DEFAULT
++#ifndef __clang__
+ MY_ATTRIBUTE((target("+crc")))
++#else
++MY_ATTRIBUTE((target("crc")))
++#endif
+ #endif /* CRC32_ARM64_DEFAULT */
+ uint32_t crc32_impl::update(uint32_t crc, uint32_t data) {
+ return __crc32cw(crc, data);
+ }
+ #ifdef CRC32_ARM64_DEFAULT
++#ifndef __clang__
+ MY_ATTRIBUTE((target("+crc")))
++#else
++MY_ATTRIBUTE((target("crc")))
++#endif
+ #endif /* CRC32_ARM64_DEFAULT */
+ uint64_t crc32_impl::update(uint64_t crc, uint64_t data) {
+ return (uint64_t)__crc32cd((uint32_t)crc, data);
+@@ -508,7 +539,11 @@ template <uint32_t w>
+ }
+ template <uint32_t w>
+ #ifdef CRC32_ARM64_DEFAULT
++#ifndef __clang__
+ MY_ATTRIBUTE((target("+crypto")))
++#else
++MY_ATTRIBUTE((target("crypto")))
++#endif
+ #endif /* CRC32_ARM64_DEFAULT */
+ uint64_t use_pclmul::polynomial_mul_rev(uint32_t rev_u) {
+ constexpr uint64_t flipped_w = flip_at_32(w);
+@@ -751,7 +786,11 @@ MY_ATTRIBUTE((flatten))
+ MY_ATTRIBUTE((flatten))
+ #endif /* CRC32_ARM64_APPLE */
+ #ifdef CRC32_ARM64_DEFAULT
++#ifndef __clang__
+ MY_ATTRIBUTE((target("+crc+crypto"), flatten))
++#else
++MY_ATTRIBUTE((target("crc,crypto")))
++#endif
+ #endif /* CRC32_ARM64_DEFAULT */
+ uint32_t crc32_using_pclmul(const byte *data, size_t len) {
+ return crc32<use_pclmul>(0, data, len);
+@@ -771,7 +810,11 @@ MY_ATTRIBUTE((flatten))
+ MY_ATTRIBUTE((flatten))
+ #endif /* CRC32_ARM64_APPLE */
+ #ifdef CRC32_ARM64_DEFAULT
++#ifndef __clang__
+ MY_ATTRIBUTE((target("+crc"), flatten))
++#else
++MY_ATTRIBUTE((target("crc")))
++#endif
+ #endif /* CRC32_ARM64_DEFAULT */
+ uint32_t crc32_using_unrolled_loop_poly_mul(const byte *data, size_t len) {
+ return crc32<use_unrolled_loop_poly_mul>(0, data, len);