Skip to content

Commit

Permalink
Fix compilation on Apple Silicon (#7714)
Browse files Browse the repository at this point in the history
Summary:
Closes - #7710

I tested this on an Apple DTK (Developer Transition Kit) with an Apple A12Z Bionic CPU and macOS Big Sur (11.0.1).

Previously the arm64 specific CRC optimisations were limited to Linux only OS... Well now Apple Silicon is also arm64 but runs macOS ;-)

Pull Request resolved: #7714

Reviewed By: ltamasi

Differential Revision: D25287349

Pulled By: pdillinger

fbshipit-source-id: 639b168bf0ac2652907531e9604936ac4974b577
  • Loading branch information
adamretter authored and facebook-github-bot committed Dec 4, 2020
1 parent eb5a8c0 commit ee4bd47
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 8 deletions.
8 changes: 4 additions & 4 deletions util/crc32c.cc
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@

#endif

#if defined(__linux__) && defined(HAVE_ARM64_CRC)
#if defined(HAVE_ARM64_CRC)
bool pmull_runtime_flag = false;
#endif

Expand Down Expand Up @@ -478,7 +478,7 @@ static bool isAltiVec() {
}
#endif

#if defined(__linux__) && defined(HAVE_ARM64_CRC)
#if defined(HAVE_ARM64_CRC)
uint32_t ExtendARMImpl(uint32_t crc, const char *buf, size_t size) {
return crc32c_arm64(crc, (const unsigned char *)buf, size);
}
Expand All @@ -498,7 +498,7 @@ std::string IsFastCrc32Supported() {
has_fast_crc = false;
arch = "PPC";
#endif
#elif defined(__linux__) && defined(HAVE_ARM64_CRC)
#elif defined(HAVE_ARM64_CRC)
if (crc32c_runtime_check()) {
has_fast_crc = true;
arch = "Arm64";
Expand Down Expand Up @@ -1231,7 +1231,7 @@ uint32_t crc32c_3way(uint32_t crc, const char* buf, size_t len) {
static inline Function Choose_Extend() {
#ifdef HAVE_POWER8
return isAltiVec() ? ExtendPPCImpl : ExtendImpl<Slow_CRC32>;
#elif defined(__linux__) && defined(HAVE_ARM64_CRC)
#elif defined(HAVE_ARM64_CRC)
if(crc32c_runtime_check()) {
pmull_runtime_flag = crc32c_pmull_runtime_check();
return ExtendARMImpl;
Expand Down
8 changes: 5 additions & 3 deletions util/crc32c_arm64.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,11 @@

#include "util/crc32c_arm64.h"

#if defined(__linux__) && defined(HAVE_ARM64_CRC)
#if defined(HAVE_ARM64_CRC)

#if defined(__linux__)
#include <asm/hwcap.h>
#endif
#ifdef ROCKSDB_AUXV_GETAUXVAL_PRESENT
#include <sys/auxv.h>
#endif
Expand Down Expand Up @@ -65,8 +67,8 @@ __attribute__((__no_sanitize__("alignment")))
__attribute__((__no_sanitize_undefined__))
#endif
#endif
uint32_t crc32c_arm64(uint32_t crc, unsigned char const *data,
unsigned len) {
uint32_t
crc32c_arm64(uint32_t crc, unsigned char const *data, size_t len) {
const uint8_t *buf8;
const uint64_t *buf64 = (uint64_t *)data;
int length = (int)len;
Expand Down
4 changes: 3 additions & 1 deletion util/crc32c_arm64.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#define UTIL_CRC32C_ARM64_H

#include <cinttypes>
#include <cstddef>

#if defined(__aarch64__) || defined(__AARCH64__)

Expand All @@ -33,7 +34,8 @@
PREF4X64L1(buffer, (PREF_OFFSET), 8) \
PREF4X64L1(buffer, (PREF_OFFSET), 12)

extern uint32_t crc32c_arm64(uint32_t crc, unsigned char const *data, unsigned len);
extern uint32_t crc32c_arm64(uint32_t crc, unsigned char const *data,
size_t len);
extern uint32_t crc32c_runtime_check(void);
extern bool crc32c_pmull_runtime_check(void);

Expand Down

0 comments on commit ee4bd47

Please sign in to comment.