【踩了一个坑】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, 跳转
// 这里就是全相交的逻辑

posted on 2025-06-04 11:42  ahfuzhang  阅读(18)  评论(0)    收藏  举报