如果我想在两个之间进行按位相等测试__m128i
变量,我是否需要使用 SSE 指令或者我可以使用==
?如果不是,我应该使用哪条SSE指令?
虽然使用_mm_movemask_epi8
是一种解决方案,如果您有一个带有 SSE4.1 的处理器,我认为更好的解决方案是使用在 FLAGS 寄存器中设置零或进位标志的指令。这节省了test or cmp操作说明.
为此,您可以这样做:
if(_mm_test_all_ones(_mm_cmpeq_epi8(v1,v2))) {
//v0 == v1
}
编辑:正如 Paul R 指出的_mm_test_all_ones
生成两条指令:pcmpeqd
and ptest
. With _mm_cmpeq_epi8
总共三个指令。这是一个更好的解决方案,总共只使用两条指令:
__m128i neq = _mm_xor_si128(v1,v2);
if(_mm_test_all_zeros(neq,neq)) {
//v0 == v1
}
这会生成
pxor %xmm1, %xmm0
ptest %xmm0, %xmm0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)