When you don’t have SSE4 available you have to compensate for the lack of ome essencial ops. In this series I’m going to write down equivalents of either missing or (currently) non-AMD ops.
pcmpeqq (64bit integer compare):
// equality == (hi == hi) && (lo == lo)
movdqa xmm?3, xmma
pcmpeqd xmm?3, xmmb
pshufd xmm?1, xmm?3, 3|3|1|1 (b == a)
pshufd xmm?2, xmm?3, 2|2|0|0 (B == A)
pand xmm?1, xmm?2 (b == a) && (B == A)
pcmpgtq (64bit integer compare):
// greater == (hi > hi) || ((hi == hi) && (lo > lo))
movdqa xmm?1, xmma
movdqa xmm?2, xmma
pcmpgtd xmm?1, xmmb
pcmpeqd xmm?2, xmmb
pshufd xmm?3, xmm?1, 3|3|1|1 (b > a)
pshufd xmm?4, xmm?2, 3|3|1|1 (b == a)
por xmm?2, xmm?1 (B > A) || (B == A)
pshufd xmm?2, xmm?2, 2|2|0|0 (B >= A)
pand xmm?2, xmm?4 (b == a) && (B >= A)
por xmm?2, xmm?3 (b > a) || ((b == a) && (B >= A))