如果你看一下这个answer,作者设法为2个整数bignums创建一个紧凑的比较算法,存储在2个SSE寄存器中。我没有太好地遵循它:)
到目前为止我做了什么:
如果l = a < b = {a[i] < b[i] ? ~0 : 0}
和
e = a == b = {a[i] == b[i] ? ~0 : 0}
然后a < b == l[3] v e[3]l[2] v e[3]e[2]l[1] v e[3]e[2]e[1]l[0]
但这似乎不是作者所做的。我错过了什么?有什么需要比比较更多?
答案 0 :(得分:0)
我忽略了答案不是通用的,而是限于由32位元素组成的64位bignums。如果您有2个64位向量a = {a0, a1}
,b = {b0, b1}
,则程序计算:
a < b = ((a1 < b1) | (a0 < b0)) & ~(a1 > b1)
在我的问题中,我的目标是使用SSE / AVX寄存器实现任意长的BigNums。