我应该将什么初始值传递给Aarch64 crc32指令?

问题描述 投票:0回答:1

AArch64 crc32 {b,h,w,x}指令将CRC-32值和数据值(分别为8、16、32或64位)作为输入,并输出新的CRC-32值,该值,大概应该作为下一条crc32指令的输入传递。

要在crc32程序为给定的字节集生成的末尾获得相同的值,初始输入值必须是什么?还有什么我需要做的吗?

[该算法在其他地方有很好的描述,但是我找不到在任何地方使用指令的示例。

crc arm64 crc32
1个回答
0
投票

[通过反复试验的奇迹,似乎crc32累加器的初始值为0xffffffff(或-1),要获得标准的crc32值,请反转返回的值,因此为~crc32

例如(dwords数组必须为8字节对齐)。

uint32_t crc32 = 0xffffffff;
for (int i = 0; i < number_of_dwords; i++) {
  asm volatile ( "crc32x %w[crc], %w[crcin], %x[data]" : [crc] "=r" (crc32) : [crcin] "r" (crc32), [data] "r" (dwords[i]) );
}
return ~crc32;
© www.soinside.com 2019 - 2024. All rights reserved.