[x4,x3,x2,x1]是任意四个数?定义成__m128i就可以,但是需要msvc或者intel c++编译器。
假设比较的四个数已经在xmm2中,
movd xmm1,i
pshufd xmm1,xmm1,0
pcmpeqd xmm1,xmm2
ptest xmm1,xmm1
jnz @@equal
// not equal to one of four numbers
@@equal:
// equal to one of four numbers
嗯,忘了说了,ptest是sse 4.1指令,较老的处理器可能不支持,其他的都是SSE/SSE2指令,可以看成是基本指令集了,十几年前的Pentium4已经支持SSE2指令集,对于连SSE2都不支持的电脑,可以说是毫无使用价值,不需要考虑了。
限定于SSE2指令集,可以:
movd xmm1,i
pshufd xmm1,xmm1,0
pcmpeqd xmm1,xmm2
movmskps eax,xmm1
test eax,eax
jnz @@equal
// not equal to one of four numbers
@@equal:
// equal to one of four numbers