替换x86 crc32q汇编指令
使用CRC32指令的方式有2种:一种是直接使用(内联)汇编代码;另一种是借助编译器intrinsics。
CRC 32主要是计算字符串的32位CRC校验码,输入待计算的字符串,输出32位CRC多项式校验码。
- x86上代码段:
static inline uint32_t SSE4_crc32_u64(uint32_t crc, uint64_t v) { uint64_t result = crc; __asm__("crc32q %1, %0" : "+r"(result) : "rm"(v)); return result; }
- 在鲲鹏上替换后:
static inline uint32_t SSE4_crc32_u64(uint32_t crc, uint64_t alue) { __asm__ __volatile__("crc32cx %w[c], %w[c], %x[v]":[c]"+r"(crc):[v]"r"(value)); return crc; }

修改后需要增加 -march=armv8-a+crc 编译选项。
父主题: 源码修改类案例