mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-11-25 00:52:02 +00:00
Addressed the review comments
This commit is contained in:
parent
5fa5ae8099
commit
28d5c3cf7f
@ -1,3 +1,5 @@
|
|||||||
|
# module crc32-vpmsum gets build along with the files vec_crc32.h and crc32_constants.h in crc32-vpmsum-cmake
|
||||||
|
# Please see README.md for information about how to generate crc32_constants.h
|
||||||
if (NOT ARCH_PPC64LE)
|
if (NOT ARCH_PPC64LE)
|
||||||
message (STATUS "crc32-vpmsum library is only supported on ppc64le")
|
message (STATUS "crc32-vpmsum library is only supported on ppc64le")
|
||||||
return()
|
return()
|
||||||
|
@ -1,8 +1,9 @@
|
|||||||
# To Generate crc32_constants.h
|
# To Generate crc32_constants.h
|
||||||
|
|
||||||
- Run make file in `../crc32-vpmsum` diretory using folling options and CRC polynomial. These options should use the same polynomial and order used by intel intrinisic functions
|
- Run make file in `../crc32-vpmsum` directory using following options and CRC polynomial. These options should use the same polynomial and order used by intel intrinisic functions
|
||||||
```bash
|
```bash
|
||||||
make crc32_constants.h CRC="0x11EDC6F41" OPTIONS="-x -r -c"
|
make crc32_constants.h CRC="0x11EDC6F41" OPTIONS="-x -r -c"
|
||||||
```
|
```
|
||||||
- move the generated `crc32_constants.h` into this directory
|
- move the generated `crc32_constants.h` into this directory
|
||||||
- To understand more about this go here: https://masterchef2209.wordpress.com/2020/06/17/guide-to-intel-sse4-2-crc-intrinisics-implementation-for-simde/
|
- To understand more about this go here: https://masterchef2209.wordpress.com/2020/06/17/guide-to-intel-sse4-2-crc-intrinisics-implementation-for-simde/
|
||||||
|
- Here is the link to information about intel intrinsic functions: https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#text=_mm_crc32_u64&ig_expand=1492,1493,1559
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
#ifndef VEC_CRC32
|
#ifndef VEC_CRC32
|
||||||
#define VEC_CRC32
|
#define VEC_CRC32
|
||||||
|
|
||||||
|
#if ! ((defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__)
|
||||||
|
# error PowerPC architecture is expected
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
extern "C" {
|
extern "C" {
|
||||||
@ -10,15 +13,9 @@ unsigned int crc32_vpmsum(unsigned int crc, const unsigned char *p, unsigned lon
|
|||||||
|
|
||||||
static inline uint32_t crc32_ppc(uint64_t crc, unsigned char const *buffer, size_t len)
|
static inline uint32_t crc32_ppc(uint64_t crc, unsigned char const *buffer, size_t len)
|
||||||
{
|
{
|
||||||
unsigned char *emptybuffer;
|
assert(buffer);
|
||||||
if (!buffer) {
|
|
||||||
emptybuffer = (unsigned char *)malloc(len);
|
|
||||||
bzero(emptybuffer, len);
|
|
||||||
crc = crc32_vpmsum(crc, emptybuffer, len);
|
|
||||||
free(emptybuffer);
|
|
||||||
} else {
|
|
||||||
crc = crc32_vpmsum(crc, buffer, (unsigned long)len);
|
crc = crc32_vpmsum(crc, buffer, (unsigned long)len);
|
||||||
}
|
|
||||||
return crc;
|
return crc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,10 +91,10 @@ inline DB::UInt64 intHashCRC32(DB::UInt64 x)
|
|||||||
return _mm_crc32_u64(-1ULL, x);
|
return _mm_crc32_u64(-1ULL, x);
|
||||||
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
||||||
return __crc32cd(-1U, x);
|
return __crc32cd(-1U, x);
|
||||||
#elif defined(__s390x__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
|
||||||
return s390x_crc32(-1U, x)
|
|
||||||
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
return crc32_ppc(-1U, reinterpret_cast<const unsigned char *>(&x), sizeof(x));
|
return crc32_ppc(-1U, reinterpret_cast<const unsigned char *>(&x), sizeof(x));
|
||||||
|
#elif defined(__s390x__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
||||||
|
return s390x_crc32(-1U, x)
|
||||||
#else
|
#else
|
||||||
/// On other platforms we do not have CRC32. NOTE This can be confusing.
|
/// On other platforms we do not have CRC32. NOTE This can be confusing.
|
||||||
/// NOTE: consider using intHash32()
|
/// NOTE: consider using intHash32()
|
||||||
@ -107,10 +107,10 @@ inline DB::UInt64 intHashCRC32(DB::UInt64 x, DB::UInt64 updated_value)
|
|||||||
return _mm_crc32_u64(updated_value, x);
|
return _mm_crc32_u64(updated_value, x);
|
||||||
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
||||||
return __crc32cd(static_cast<UInt32>(updated_value), x);
|
return __crc32cd(static_cast<UInt32>(updated_value), x);
|
||||||
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
|
||||||
return s390x_crc32(updated_value, x);
|
|
||||||
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
return crc32_ppc(updated_value, reinterpret_cast<const unsigned char *>(&x), sizeof(x));
|
return crc32_ppc(updated_value, reinterpret_cast<const unsigned char *>(&x), sizeof(x));
|
||||||
|
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
||||||
|
return s390x_crc32(updated_value, x);
|
||||||
#else
|
#else
|
||||||
/// On other platforms we do not have CRC32. NOTE This can be confusing.
|
/// On other platforms we do not have CRC32. NOTE This can be confusing.
|
||||||
return intHash64(x) ^ updated_value;
|
return intHash64(x) ^ updated_value;
|
||||||
|
@ -40,10 +40,10 @@ struct Hash
|
|||||||
return _mm_crc32_u64(crc, val);
|
return _mm_crc32_u64(crc, val);
|
||||||
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
||||||
return __crc32cd(static_cast<UInt32>(crc), val);
|
return __crc32cd(static_cast<UInt32>(crc), val);
|
||||||
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
|
||||||
return s390x_crc32(crc, val);
|
|
||||||
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
return crc32_ppc(crc, reinterpret_cast<const unsigned char *>(&val), sizeof(val));
|
return crc32_ppc(crc, reinterpret_cast<const unsigned char *>(&val), sizeof(val));
|
||||||
|
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
||||||
|
return s390x_crc32(crc, val);
|
||||||
#else
|
#else
|
||||||
throw Exception("String hash is not implemented without sse4.2 support", ErrorCodes::NOT_IMPLEMENTED);
|
throw Exception("String hash is not implemented without sse4.2 support", ErrorCodes::NOT_IMPLEMENTED);
|
||||||
#endif
|
#endif
|
||||||
@ -55,10 +55,10 @@ struct Hash
|
|||||||
return _mm_crc32_u32(crc, val);
|
return _mm_crc32_u32(crc, val);
|
||||||
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
||||||
return __crc32cw(crc, val);
|
return __crc32cw(crc, val);
|
||||||
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
|
||||||
return s390x_crc32_u32(crc, val);
|
|
||||||
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
return crc32_ppc(crc, reinterpret_cast<const unsigned char *>(&val), sizeof(val));
|
return crc32_ppc(crc, reinterpret_cast<const unsigned char *>(&val), sizeof(val));
|
||||||
|
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
||||||
|
return s390x_crc32_u32(crc, val);
|
||||||
#else
|
#else
|
||||||
throw Exception("String hash is not implemented without sse4.2 support", ErrorCodes::NOT_IMPLEMENTED);
|
throw Exception("String hash is not implemented without sse4.2 support", ErrorCodes::NOT_IMPLEMENTED);
|
||||||
#endif
|
#endif
|
||||||
@ -70,10 +70,10 @@ struct Hash
|
|||||||
return _mm_crc32_u16(crc, val);
|
return _mm_crc32_u16(crc, val);
|
||||||
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
||||||
return __crc32ch(crc, val);
|
return __crc32ch(crc, val);
|
||||||
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
|
||||||
return s390x_crc32_u16(crc, val);
|
|
||||||
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
return crc32_ppc(crc, reinterpret_cast<const unsigned char *>(&val), sizeof(val));
|
return crc32_ppc(crc, reinterpret_cast<const unsigned char *>(&val), sizeof(val));
|
||||||
|
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
||||||
|
return s390x_crc32_u16(crc, val);
|
||||||
#else
|
#else
|
||||||
throw Exception("String hash is not implemented without sse4.2 support", ErrorCodes::NOT_IMPLEMENTED);
|
throw Exception("String hash is not implemented without sse4.2 support", ErrorCodes::NOT_IMPLEMENTED);
|
||||||
#endif
|
#endif
|
||||||
@ -85,10 +85,10 @@ struct Hash
|
|||||||
return _mm_crc32_u8(crc, val);
|
return _mm_crc32_u8(crc, val);
|
||||||
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
||||||
return __crc32cb(crc, val);
|
return __crc32cb(crc, val);
|
||||||
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
|
||||||
return s390x_crc32_u8(crc, val);
|
|
||||||
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
return crc32_ppc(crc, reinterpret_cast<const unsigned char *>(&val), sizeof(val));
|
return crc32_ppc(crc, reinterpret_cast<const unsigned char *>(&val), sizeof(val));
|
||||||
|
#elif defined(__s390x__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
|
||||||
|
return s390x_crc32_u8(crc, val);
|
||||||
#else
|
#else
|
||||||
throw Exception("String hash is not implemented without sse4.2 support", ErrorCodes::NOT_IMPLEMENTED);
|
throw Exception("String hash is not implemented without sse4.2 support", ErrorCodes::NOT_IMPLEMENTED);
|
||||||
#endif
|
#endif
|
||||||
|
@ -74,10 +74,10 @@ struct NgramDistanceImpl
|
|||||||
return _mm_crc32_u64(code_points[2], combined) & 0xFFFFu;
|
return _mm_crc32_u64(code_points[2], combined) & 0xFFFFu;
|
||||||
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
#elif defined(__aarch64__) && defined(__ARM_FEATURE_CRC32)
|
||||||
return __crc32cd(code_points[2], combined) & 0xFFFFu;
|
return __crc32cd(code_points[2], combined) & 0xFFFFu;
|
||||||
#elif defined(__s390x__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
|
||||||
return s390x_crc32(code_points[2], combined) & 0xFFFFu;
|
|
||||||
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
#elif (defined(__PPC64__) || defined(__powerpc64__)) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
|
||||||
return crc32_ppc(code_points[2], reinterpret_cast<const unsigned char *>(&combined), sizeof(combined)) & 0xFFFFu;
|
return crc32_ppc(code_points[2], reinterpret_cast<const unsigned char *>(&combined), sizeof(combined)) & 0xFFFFu;
|
||||||
|
#elif defined(__s390x__) && __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__
|
||||||
|
return s390x_crc32(code_points[2], combined) & 0xFFFFu;
|
||||||
#else
|
#else
|
||||||
return (intHashCRC32(combined) ^ intHashCRC32(code_points[2])) & 0xFFFFu;
|
return (intHashCRC32(combined) ^ intHashCRC32(code_points[2])) & 0xFFFFu;
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user