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

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