中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

替换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 编译选项。