跳转到内容

vpcmpeqb & vpcmpmskb

指令名称含义如下

  • v是avx系列前缀
  • Packed在前面是整数指令
  • cmp比较,eq是equal相等的,还有GT(Greater Than)选项
  • b表示byte
vpcmpeqb ymm0, ymm0, ymm1

具体作用是将ymm0和ymm1逐byte比较,相等的byte是FF,不相等是00,最后将结果存入ymm0

这里的msk指的是mask,取ymm0的每个byte的最高位变成32 bits的内容存入edx

vpmovmskb edx, ymm0

比如ymm0以32个bytes来看,原本是[10001000, 01001000, 10001100, …]
这里就是取了1 0 1最高位,将这些拼成32位给edx寄存器
这个指令dst也支援reg64,但对32位寄存器写入动作会触发高32位清零结果是相同的

把vpcmpeqb和vpmovskb结合起来的话,比对ymm0和ymm1是否相同,相同的FF,不相同的00
经过vpmovskb就会得到相同是1,不同是0的遮罩了
也可以 test edx, edx 判断是否存在相同的
下一篇将介绍实际应用