在我目前的项目中,我必须比较128位值(实际上是md5哈希),我认为可以通过使用SSE指令来加速比较.我的问题是我无法找到关于SSE指令的好文档;我正在寻找一个128位整数比较指令,让我知道一个散列是大于,小于或等于另一个.这样的指令是否存在?
PS:目标计算机是带有SSE2指令的x86_64服务器;我也对同一工作的NEON指令感兴趣.
解决方法
SSE或NEON指令集中没有128位整数比较指令.
SSE4.1添加了向量64位整数比较:PCMPEQQ和PCMPGTQ,但由于它们的实现方式,将它们中的两个组合成128位比较并不是直截了当的.
在x86_64上完成128位比较的首选方法是在高字上使用64位比较,然后仅在高字比较相等时对低字进行额外的64位比较:
cmp {ahi},{bhi} jne 0f cmp {alo},{blo} 0: // flags are now set as though a comparison of unsigned 128-bit values // was performed; signed comparisons are a bit different.
在ARM上,通常的习惯用法是逐字的条件比较序列,用于根据需要设置标志.