在x64汇编中,如果%XMM0和%XMM1中没有设置相同的位,则PTEST %XMM0 -> %XMM1设置零标志,如果%XMM0中设置的所有内容也在%XMM1中设置,则设置进位标志:

IF (SRC[127:0] bitwiseAND DEST[127:0] = 0)
    ZF = 1;
ELSE
    ZF = 0;
FI;
IF (SRC[127:0] bitwiseAND (bitwiseNOT DEST[127:0]) = 0)
    CF = 1;
ELSE
    CF = 0;
FI;
DEST[127:0] Unmodified;
AF = OF = PF = SF = 0;

如果在%XMM0 or %XMM1中设置了任何位,我经常发现自己想要一个标志 . 您可以通过以下两条说明执行此操作:

POR %XMM0 -> %XMM1
PTEST %XMM1, %XMM1

但这需要额外的延迟周期 . 我现在有一个案例,我真的想保存这个循环 . 有更快的方法吗?或者一些显而易见的方式我错过了使用PTEST这样做?我希望有一些隐藏的等价物:

PTEST_OR %XMM0, %XMM1

这存在吗?