diff --git a/be/src/olap/hll.h b/be/src/olap/hll.h index 776289c7588a35..9c4429ae061085 100644 --- a/be/src/olap/hll.h +++ b/be/src/olap/hll.h @@ -25,6 +25,8 @@ #ifdef __x86_64__ #include +#elif __aarch64__ +#include #endif #include "vec/common/hash_table/phmap_fwd_decl.h" @@ -287,6 +289,17 @@ class HyperLogLog { src += 32; dst += 32; } +#elif __aarch64__ + int loop = HLL_REGISTERS_COUNT / 16; + uint8_t* dst = _registers; + const uint8_t* src = other_registers; + for (int i = 0; i < loop; i++) { + uint8x16_t va = vld1q_u8(dst); + uint8x16_t vb = vld1q_u8(src); + vst1q_u8(dst, vmaxq_u8(va, vb)); + src += 16; + dst += 16; + } #else for (int i = 0; i < HLL_REGISTERS_COUNT; ++i) { _registers[i] =