【踩了一个坑】plan9汇编中,VPTEST 指令无法判断两个 256bit 寄存器全等
作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!
我想要做两个 int64 数组的比较:
align_4:
VPBROADCASTQ R12, Y1
VMOVDQU (R8), Y0
VPTEST Y0, Y1 // 希望一次比较四个 int64
JE align_4
MOVB $0, ret+24(FP) // return 0
RET
最后发现,VPTEST 只能判断全不等,或者其中一个相等,做不到判断四个全等。
只能使用 move mask 的方法了:
VPAND Y2, Y3, Y4 // Y4 = Y2 & Y3
VPCMPEQQ Y3, Y4, Y5 // Y5 = (Y4 == Y3) ? 0xFFFFFFFFFFFFFFFF : 0
VMOVMSKPD Y5, R11 // R11 = 4bit掩码
CMPQ R11, $0xF // 全部相交 = 0xF
JNE not_all_match // 如果不是0xF, 跳转
// 这里就是全相交的逻辑

浙公网安备 33010602011771号