当前,我正在尝试从使用NASM过渡到在c语言中使用内联汇编,因为这将使将来的链接变得更加容易(尤其是内联)。但是,我无法使矢量指令很好地播放。在Intel汇编中,我能够执行以下操作:
vpcmpeqb ymm0, [rdi]
这将从rdi
读取32个字节,与ymm0
比较并标记相等的字节。使用AT&T,我尝试在c内联汇编中执行以下操作,但是它不起作用,它一直抱怨操作数大小不匹配(其中%1是"r"(s)
的输入):
vpcmpeqb %%ymm0, %%ymm0, (%1)
我正在使用gcc版本9.2.1
。
AT&T对操作数使用不同的顺序。要解决您的问题,您应该使用
vpcmpeqb (%1), %%ymm0, %%ymm0
另外,请阅读对话下的主题以获取有关此主题的更多信息。