You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by ya...@apache.org on 2022/08/03 05:19:43 UTC
[doris-thirdparty] 09/21: fix arm support
This is an automated email from the ASF dual-hosted git repository.
yangzhg pushed a commit to branch libhdfs3
in repository https://gitbox.apache.org/repos/asf/doris-thirdparty.git
commit 0eaffe6ae30f88a603cf2e6db947be399f4dc459
Author: yangzhg <ya...@gmail.com>
AuthorDate: Mon Jun 6 21:18:04 2022 +0800
fix arm support
---
src/common/HWCrc32c.cpp | 47 +++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 45 insertions(+), 2 deletions(-)
diff --git a/src/common/HWCrc32c.cpp b/src/common/HWCrc32c.cpp
index 32d8005..1152745 100644
--- a/src/common/HWCrc32c.cpp
+++ b/src/common/HWCrc32c.cpp
@@ -23,7 +23,50 @@
#include <cstdlib>
#include "HWCrc32c.h"
+
+#if ((defined(__X86__) || defined(__i386__) || defined(i386) || defined(_M_IX86) || defined(__386__) || defined(__x86_64__) || defined(_M_X64)))
+#include <cpuid.h>
+#endif
+
+#if ((defined(__X86__) || defined(__i386__) || defined(i386) || defined(_M_IX86) || defined(__386__) || defined(__x86_64__) || defined(_M_X64)))
+#if !defined(__SSE4_2__)
+
+namespace Hdfs {
+namespace Internal {
+
+#if defined(__LP64__)
+static inline uint64_t _mm_crc32_u64(uint64_t crc, uint64_t value) {
+ asm("crc32q %[value], %[crc]\n" : [crc] "+r"(crc) : [value] "rm"(value));
+ return crc;
+}
+#endif
+
+static inline uint32_t _mm_crc32_u16(uint32_t crc, uint16_t value) {
+ asm("crc32w %[value], %[crc]\n" : [crc] "+r"(crc) : [value] "rm"(value));
+ return crc;
+}
+
+static inline uint32_t _mm_crc32_u32(uint32_t crc, uint64_t value) {
+ asm("crc32l %[value], %[crc]\n" : [crc] "+r"(crc) : [value] "rm"(value));
+ return crc;
+}
+
+static inline uint32_t _mm_crc32_u8(uint32_t crc, uint8_t value) {
+ asm("crc32b %[value], %[crc]\n" : [crc] "+r"(crc) : [value] "rm"(value));
+ return crc;
+}
+
+}
+}
+
+#else
+
+#include <nmmintrin.h>
+
+#endif
+#elseif ((defined(__arm__) || defined(__aarch64__)))
#include "sse2neon.h"
+#endif
namespace Hdfs {
namespace Internal {
@@ -37,7 +80,7 @@ bool HWCrc32c::available() {
*/
__get_cpuid(1, &eax, &ebx, &ecx, &edx);
return (ecx & (1 << 20)) != 0;
-#elseif ((defined(__arm__) || defined(__aarch64__))) {
+#elseif ((defined(__arm__) || defined(__aarch64__)))
return true;
#else
return false;
@@ -116,4 +159,4 @@ void HWCrc32c::updateInt64(const char * b, int len) {
}
}
-}
+}
\ No newline at end of file
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org