带YMM寄存器的AVX中STRLEN功能的说明

时间:2019-10-30 09:34:33

标签: assembly avx avx2

我正在使用 AVX (不是AVX2)创建 strlen 函数... 使用AVX可以访问(YMM)寄存器,但是有一个问题...我知道strlen函数的指令是:

vmovdqu
vpcmpeqb
vpmovmskb

但是这些说明仅适用于AVX中的“ XMM” ...,如果我想将它们与(YMM)一起使用,则需要安装AVX2-CPU ...但是我在谈论AVX ... 现在要使用“ AVX”和“ YMM”寄存器创建strlen函数,我必须使用哪些指令?

1 个答案:

答案 0 :(得分:3)

如果没有AVX2,则无法与YMM寄存器进行字节比较。实际上,AVX1中没有字节元素YMM指令。

AVX1仅适用于256位浮点向量,或复制/改组任意数据。在AVX2之前,大多数整数/位精确的东西都是不可能的。这就是存在AVX2的原因。

像使用SSE2一样使用XMM寄存器,而AVX1的唯一好处就是可以保存在movdqa寄存器复制说明中。

假设可以将字节解压缩为浮点数(缓慢地使用shuffle + vinsertf128),然后立即将8与vcmpps比较。但是您可以一次与vpcmpeqb xmm比较16个字节,因此可以像普通人一样进行操作,并且每个向量可以完成两倍的工作,同时仍然可以享受AVX无损3操作数指令编码的优势。